实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
示例 1:输入: haystack = "hello", needle = "ll"输出: 2
示例 2:输入: haystack = "aaaaa", needle = "bba"输出: -1
说明:当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。
拿到这道题目,心头一阵颤抖,这题目想干啥?
呜。我觉得这个题目就是找到子串的起始位置。那么这样就很简单啦
我们将字符串转为数组,然后遍历即可。
分三大种情况
1、haystack长度大于needle长度时:
可是,我们如何判断子串的初始位置,那么就是当haystack的某一个字符和needle的首字符相同即可,同时保存当前位置的指针。接下来进入内层循环,判断是否后面的也相同。
若相同则跳出循环,返回位置,不相同则指针后移,但后移的过程中为了避免数组越界,我们需要将最外层循环的次数设为haystack-needle+1.这样就避免了数组越界的问题。
同时此种情况有个特殊的,当needle为“”空字符串时,返回0即可
2、haystack长度等于needle长度时,一次循环,不同的话跳出返回-1,相同返回0即可。
3、haystack长度小于needle长度时,返回-1
代码如下所示
class Solution {
public int strStr(String haystack, String needle) {
if(needle.length()==0)//1的特殊情况
return 0;
else if(haystack.length()<needle.length())//情况3
return -1;
else{
char[] hay=haystack.toCharArray();
char[] need=needle.toCharArray();
boolean flag=false;//标志位判断是否有子串
if(hay.length==need.length){//情况2
flag=true;
int i=0;
for(;i<hay.length;i++)
if(hay[i]!=need[i])
{
flag=false;
break;
}
if(flag==true)
return 0;
}
else{
for(int i=0;i<hay.length-need.length+1;i++){//情况1
if(hay[i]==need[0]){
flag=true;
for(int j=0;j<need.length;j++){
if(hay[i+j]!=need[j])
flag=false;
if(flag==false)
break;
}
}
if(flag==true){
return i;
}
else{}
}
}
if(flag==false)
return -1;
}
return -1;
}
}
最后宣传下我个人的微信公众号,微信搜索:可及的小屋,有志向整副业,娱乐的程序员们,欢迎您的到来。谢谢。
100G程序员资料,自取哦!!