难点:当字符串部分匹配时,怎么回溯?
class Solution {
public int strStr(String haystack, String needle) {
if(needle == null || needle.equals("")){
return 0;
}
if(haystack.length() < needle.length())
return -1;
char[] haystackChars = haystack.toCharArray();
char[] needleChars = needle.toCharArray();
return implStr(haystackChars, 0 , needleChars);
}
public static int implStr(char[] haystackChar, int start, char[] needleChars) {
if(haystackChar.length - start < needleChars.length)
return -1;
int index = start;
int j = 0;
while(start < haystackChar.length) {
while(start < haystackChar.length && haystackChar[start] != needleChars[j]) {
start++;
}
if(start == haystackChar.length)
return -1;
index = start;
while (start < haystackChar.length && j < needleChars.length && haystackChar[start] == needleChars[j]){
start++;
j++;
}
if(j == needleChars.length)
return index;
int newStart = index + 1;
for(; newStart < haystackChar.length; newStart++) {
if(haystackChar[newStart] == needleChars[0]) {
break;
}
}
return implStr(haystackChar, newStart, needleChars);
}
return -1;
}
}