Implement strStr()
题意:最经典的pattern匹配问题,题中要求把pattern匹配的位置到结尾都输出。
解法:
O(n*m):Brute-force暴力不清楚能不能过
O(n+m):KMP算法
public class Solution125 {
int[]f;
public String strStr(String haystack, String needle) {
int n=haystack.length();
int m=needle.length();
if (n==0&&m==0){
return "";
}
if (m==0){
return haystack;
}
if (n==0){
return null;
}
f=new int[m];
computeF(needle);
int i=0;
int j=0;
while(i<n){
if(haystack.charAt(i)==needle.charAt(j)){
if (j==m-1){
returnhaystack.substring(i-m+1, haystack.length());
}else{
i++;
j++;
}
}else{
if (j>0){
j=f[j-1];
}else{
i++;
}
}
}
return null;
}
privatevoid computeF(String pattern) {
intm=pattern.length();
f[0]=0;
inti=1;
intj=0;
while(i<m){
if(pattern.charAt(j)==pattern.charAt(i)){
f[i]=j+1;
i++;
j++;
}else{
if(j>0){
j=f[j-1];
}else{
f[i]=0;
i++;
}
}
}
}
}
O(m+n):后缀树