CSU 1598: 最长公共前缀(KMP)
来源:互联网 发布:下载word2010软件 编辑:程序博客网 时间:2024/06/06 00:08
CSU 1598: 最长公共前缀 KMP
Description
给定两个字符串s和t,现有一个扫描器,从s的最左边开始向右扫描,每次扫描到一个t就把这一段删除,输出能发现t的个数。
Input
第一行包含一个整数T(T<=50),表示数据组数。
每组数据第一行包含一个字符串s,第二行一个字符串t,字符串长度不超过1000000。
Output
对于每组数据,输出答案。
Sample Input
2abababababababba
Sample Output
32
Hint
Source
国防科学技术大学第十八届银河之光文化节ACM程序设计竞赛初赛思路: KMP模板题
#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <cmath>#include <algorithm>#include <queue>#include <stack>#include <vector>#include <set>//include <map>using namespace std;char s1[1000005];char s2[1000005];int Next[1000005];int n,m;int ans;int match(){ for(int i = 0 , j = 0 ; i < n ;) { if(s1[i] == s2[j]){ i++,j++; if(j == m){ ans++; j = 0; } }else if(j == 0) i++; else j = Next[j]; } return -1;}int main(){ int t; cin>>t; while(t--) { scanf("%s%s",s1,s2); n = strlen(s1); m = strlen(s2); ans = 0; Next[0] = Next[1] = 0; for(int i = 1 ; i < m ; i++){ int k = Next[i]; while(s2[i] != s2[k] && k != 0) k = Next[k]; if(s2[i] == s2[k]) Next[i+1] = k + 1; else Next[i+1] = 0; } match(); cout<<ans<<endl; } return 0;}
阅读全文
0 0
- CSU 1598: 最长公共前缀(KMP)
- CSU 1598 最长公共前缀 【KMP】
- CSU 1598 最长公共前缀 KMP连续匹配
- CSU 1598 最长公共前缀
- CSU-1598 最长公共前缀
- 后缀数组 CSU - 1598 最长公共前缀
- CSU 1632 最长公共前缀(出现超过两次的不同子串有多少个)
- 最长公共前缀(LCP)
- 最长公共字符串(KMP)
- Longest Common Prefix(最长公共前缀)
- Longest Common Prefix (最长公共前缀)
- 后缀数组 + LCP(最长公共前缀)
- 最长公共前缀(Longest Common Prefix)
- 最长公共前缀
- 最长公共前缀
- LintCode-最长公共前缀
- LintCode 最长公共前缀
- (78)最长公共前缀
- 十年过去了,各位 .net 兄弟还好吗
- python中的异常处理 try..except
- hadoop2.x之IO:序列化
- lintcode--x的平方根
- CSS中的选择器
- CSU 1598: 最长公共前缀(KMP)
- (UVA
- 51Nod 线段的重合
- c++string与数字的互转
- linux 磁盘存储相关命令
- POJ
- POJ 2728 Desert King(最优比率生成树)
- 《好未来编程题》求和
- HDU 6108 小C的倍数问题【】