public int strStr(String haystack, String needle) {
//不满足的条件直接返回-1
if (haystack.length() < needle.length() || haystack == null){
return -1;
}
if (needle.length() == 0 || needle == null){
return 0;
}
int L = haystack.length();
int R = needle.length();
int lindex = 0;
while (lindex < L - R + 1){
//首字母不相同,直接跳过
while (lindex < L - R + 1 && haystack.charAt(lindex) != needle.charAt(0)) lindex++;
int rindex = 0;
int curLength = 0;
//即便haystack中有多个needle ,while循环可以控制只遍历到第一个needle 因为:rindex < R
while (lindex < L && rindex < R && haystack.charAt(lindex) == needle.charAt(rindex)){
lindex++;
rindex++;
curLength++;
}
//符合条件,返回
if (curLength == needle.length()){
return lindex - R;
}
//如果没有找到合适的子串,母串的指针lindex = lindex - rindex + 1
lindex = lindex - rindex + 1;
}
return -1;
}
1、双指针遍历两个字符串,当子串为空时,直接返回0
2、当curLength 不等于 子串长度时,需要将母串的指针 回至:lindex = lindex - rindex + 1;