leetcode第28题

简介: 返回一个字符串 needle 在另一个字符串 haystack 中开始的位置,如果不存在就返回 -1 ,如果 needle 长度是 0 ,就返回 0 。就是一一比较就好,看下代码吧。

image.png

返回一个字符串 needle 在另一个字符串 haystack 中开始的位置,如果不存在就返回 -1 ,如果 needle 长度是 0 ,就返回 0 。

就是一一比较就好,看下代码吧。

publicintstrStr(Stringhaystack, Stringneedle) {
if (needle.length() ==0) {
return0;
    }
intj=0;
//遍历每个字符for (inti=0; i<haystack.length(); i++) {
//相等的话计数加 1 if (haystack.charAt(i) ==needle.charAt(j)) {
j++;
//长度够了就返回if (j==needle.length()) {
returni-j+1;
            }
// 不相等的话 j 清零,// 并且 i 回到最初的位置,之后就进入 for 循环中的 i++,从下个位置继续判断        } else {
i=i-j;
j=0;
        }
    }
return-1;
}

时间复杂度:假设 haystack 和 needle 的长度分别是 n 和 k,对于每一个 i ,我们最多执行 k - 1 次,总共会有 n 个 i ,所以时间复杂度是 O(kn)。

空间复杂度:O(1)。

我们再看下别人的代码,用两个 for 循环。但本质其实是一样的,但可能会更好理解些吧。

publicintstrStr(Stringhaystack, Stringneedle) {
for (inti=0; ; i++) {
for (intj=0; ; j++) {
if (j==needle.length()) returni;
if (i+j==haystack.length()) return-1;
if (needle.charAt(j) !=haystack.charAt(i+j)) break;
    }
  }
}

总的来说,还是比较简单的,就是简单的遍历就实现了。

相关文章
|
NoSQL 数据可视化 关系型数据库
SpringBoot 多模块项目打包部署保姆级教程
SpringBoot 多模块项目打包部署保姆级教程
1885 0
SpringBoot 多模块项目打包部署保姆级教程
|
数据处理 计算机视觉 Python
【目标检测】指定划分COCO数据集训练(车类,行人类,狗类...)
【目标检测】指定划分COCO数据集训练(车类,行人类,狗类...)
5804 0
|
安全 网络安全 数据安全/隐私保护
计算机网络实验(思科模拟器Cisco Packet Tracer)——无线路由和防火墙配置
计算机网络实验(思科模拟器Cisco Packet Tracer)——无线路由和防火墙配置
计算机网络实验(思科模拟器Cisco Packet Tracer)——无线路由和防火墙配置
|
SQL 安全 Linux
Centos7安装Docker搭建DVWA靶场
Centos7安装Docker搭建DVWA靶场
Centos7安装Docker搭建DVWA靶场
|
Linux 对象存储 Windows
MinIO 客户端安装与使用教程
详细讲解MinIO CLI的安装与使用
5000 0
|
SQL 机器学习/深度学习 XML
mybatis-plus分页查询详解
mybatis-plus分页查询详解
10863 0
mybatis-plus分页查询详解
|
弹性计算 对象存储 CDN
阿里云账号注册流程(新手教程)
阿里云账号怎么注册?阿里云账号注册流程分为手机号注册、阿里云APP注册、支付宝和钉钉多种注册方式
2449 0
阿里云账号注册流程(新手教程)
|
Java Maven Nacos
你不知道的小技巧:轻松解决maven中jar包依赖问题
你不知道的小技巧:轻松解决maven中jar包依赖问题
498 0
你不知道的小技巧:轻松解决maven中jar包依赖问题
|
机器学习/深度学习
【深度学习】7-矩阵乘法运算的反向传播求梯度
【深度学习】7-矩阵乘法运算的反向传播求梯度
932 0
【深度学习】7-矩阵乘法运算的反向传播求梯度