- 首先计算出两个字符串的长度haystack长度为n needle长度为m
- 使用两次for循环,第一层for循环的条件是 i+m要小于n,目的保证i加上needle的长度不越界
- 之后设定一个标志位flag为true
- 执行第二层for循环,j小于m的时候,j++
- 当haystack.charAt(i+j) != needle.charAt(j)的时候,说明此位置上,不满足两个字符串重合,则,将标志位设定为false,跳出此次的for循环
- 若第二个for循环的条件全部都满足,则直接返回flag的标志位 true,若全部都不满足,则返回-1
- 二刷:第一层循环的时候,终止条件是 i + m <= n。在第二层循环中的 判断位置,因为j总是从0开始,则 (i + j)其实就是在寻找 在 haystack中 i 满足条件的位置
class Solution {
public int strStr(String haystack, String needle) {
int n = haystack.length(), m = needle.length();
for(int i = 0; i + m <= n; i++){
boolean flag = true;
for(int j = 0; j < m; j++){
if(haystack.charAt(i + j) != needle.charAt(j)){
flag = false;
break;
}
}
if(flag) return i;
}
return -1;
}
}