题目:
Implement strStr().
Return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
Example 1:
Input: haystack = "hello", needle = "ll" Output: 2
Example 2:
Input: haystack = "aaaaa", needle = "bba" Output: -1
在haystack找到子串needle,返回needle的第一个字符在haystack中的index,找不到则返回-1.
思路:用i指向haystack,用j指向needle,比较i和j指向的字符:
①相等:如果j=needle.length,那么表示到这里needle已经遍历完,返回相应的位置,否则表示needle还没遍历完,那么i++,j++
②不相等:这个串到这里匹配失败,需要改变i和j的位置重新寻找,i需要指向haystack中刚刚被匹配的那个串的第二个字符i=i-j+1,j则需要指向needle的头,即j=0
时间复杂度为O(n)
public class Solution {
public int strStr(String haystack, String needle) {
if(needle.length()==0)
return 0;
char[] c1=haystack.toCharArray();
char[] c2=needle.toCharArray();
int i=0,j=0;
while(i<c1.length&&j<c2.length){
if(c1[i]==c2[j]){
if(j==c2.length-1)
return i-c2.length+1;
else{
i++;
j++;
}
}
else{
i=i-j+1;
j=0;
}
}
return -1;
}
}