HDOJ 2087 剪花布条 [KMP]
2009-09-16 09:09
288 查看
//题目描述:HDOJ 2087 剪花布条 //问题抽象:典型的字符串匹配问题 //核心算法:KMP //时间复杂度:O(n+m) #include<iostream> #include<string> using namespace std; const int MaxSize=1000; //计算next[]值,kmp核心 void GetNext(string t,int next[]) { int j,k; j=0;k=-1;next[0]=-1; while(j<(int)(t.size()-1)) { if(k==-1 || t[j] == t[k]) { j++;k++; next[j]=k; } else k=next[k]; } }//O(n) //kmp具体实现 int KMP(string s,string t,int i) { int next[MaxSize],j=0; GetNext(t,next); while (i<(int)s.size() && j<(int)t.size()) { if (j == -1 || s[i] == t[j]) { i++;j++; } else j=next[j]; } if (j >= (int)t.size()) return i; else return -1; }//O(m) //主函数,whie循环调用kmp,统计匹配次数 int main() { string s,t; int i,count,k; while(cin>>s,s!="#") { cin>>t; i=0;count=0; while(i<(int)s.size()) { k=KMP(s,t,i); if(k != -1) { count++; i=k; } else break; } cout << count <<endl; } return 0; }
相关文章推荐
- [HDOJ 2087] 剪花布条 [KMP]
- hdoj 2087 剪花布条 (简单的KMP匹配)
- hdoj 2087 剪花布条 【kmp】
- hdoj 2087 剪花布条 【KMP】
- hdoj 2087 剪花布条 【kmp(变形题)】
- hdu-2087 剪花布条 【kmp】
- (KMP 1.3)hdu 2087 剪花布条(求文本串中有几个模式串)
- HDU-2087-剪花布条 KMP
- HDU - 2087 剪花布条——kmp
- HDU-2087 - 剪花布条 - KMP
- [HDOJ2087]剪花布条
- 【kmp字符串匹配】hdu 2087 剪花布条
- hdu 2087 剪花布条 - KMP
- 剪花布条 (HDU_2087) KMP
- hdu 2087 剪花布条 (kmp入门)
- hdu——2087剪花布条 ( kmp 和 find用法 )
- HDU 2087 (KMP不可重叠的匹配) 花布条
- HDU 2087 剪花布条 KMP
- HDU 2087 剪花布条 //简单kmp
- hdu 2087剪花布条 (KMP入门 子串出现的次数和子串个数)