字符串匹配算法
1.BF算法
算法复杂度O(m*n)
int BFMatch(string s,string p){ int i=0,j=0; while(i<s.length()){ j=0; while(s[i]==p[j]&&j<p.length()){//小心字符串结尾都有个\0结束符,如果刚好匹配到结尾,没加限定j会比真实值大1! i++; j++; } if(j==p.length()) return i-j; else i=i-j+1; } return -1; }
2.KMP匹配算法
算法复杂度O(m+n)
int getnext(string p,int *next){ int i=0,j=-1; next[0]=-1; while(i<p.length()-1){//小心i越界,i=p.length()时,++i后,next[i]=j; if(j==-1||p[i]==p[j]){ ++j; ++i; next[i]=j; } else j=next[j]; } }
int KMPMatch(string s,string p){ int next[100],i=0,j=0; getnext(p,next); while(i<s.length()){//这里的i的范围和前面的不同!! if(j==-1||s[i]==p[j]){ ++i; ++j; } else j=next[j]; if(j==p.length()) return i-p.length(); } return -1; }