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):后缀树
本文深入讲解了KMP算法在字符串匹配中的应用,并提供了一个具体的Java实现案例。文章首先介绍了问题背景,随后详细解释了KMP算法的工作原理及其如何提高字符串匹配效率。此外,还给出了用于计算部分匹配表的方法。
1149

被折叠的 条评论
为什么被折叠?



