例题:
分析:
题目的意思就是:
先给出一个字符串pattern,要拿着pattern字符串和原始字符串(origin)比对,若在origin中找到了pattern字符串,则返回pattern字符串在原始字符串origin中的下标。
先拿着pattern和origin从第一个字符开始依次比对。
单个字符比对若一致, 继续往下比对其它字符。
直到找出第一个比对不成功情况,此时可以把 i 向右移动一位(i++), j 回到0索引,origin字符串从 i = 1索引开始重新和pattern比对,如下图:
重复上述步骤,在原始字符串(origin)中找到和pattern相同的部分,返回当前索引 i :
思路:
可以使用两个循环来依次比对,外层循环表示从原始字符串索引 i 开始和pattern进行比对,
注意:外层循环不必循环origin.length 次,循环origin.length - pattern.length 次即可。
代码实现:
package leetcode;
public class StrStrLeetcode28 {
public static int strStr(String haystack, String needle) {
char[] pattern = needle.toCharArray();
char[] origin = haystack.toCharArray();
int i = 0; //原始数组的索引
int j = 0; //模式数组的索引
while(i <= origin.length - pattern.length){
for (j = 0; j < pattern.length; j++) {
if(origin[i + j] != pattern[j]){
break;
}
}
if(j == pattern.length){ //表示pattern字符串中的所有字符都成功匹配了origin
return i;
}
i++;
}
return -1;
}
public static void main(String[] args) {
System.out.println(strStr("aaacaaab", "aaab"));
}
}