NYOJ 5 Binary String Matching (KMP)
2016-06-21 12:16
253 查看
题目5
题目信息
运行结果
本题排行
讨论区
时间限制:3000 ms | 内存限制:65535 KB
难度:3
描述Given two strings A and B, whose alphabet consist only ‘0’ and ‘1’. Your task is only to tell how many times does A appear as a substring of B? For example, the text string B is ‘1001110110’ while the pattern string A is
‘11’, you should output 3, because the pattern A appeared at the posit
输入The first line consist only one integer N, indicates N cases follows. In each case, there are two lines, the first line gives the string A, length (A) <= 10, and the second line gives the string B, length (B) <= 1000. And
it is guaranteed that B is always longer than A.
输出For each case, output a single line consist a single integer, tells how many times do B appears as a substring of A.
样例输入
样例输出
这个题的数据很水,可以使用暴力AC,但是还是使用KMP比较好
1.
2.
题目信息
运行结果
本题排行
讨论区
Binary String Matching
时间限制:3000 ms | 内存限制:65535 KB难度:3
描述Given two strings A and B, whose alphabet consist only ‘0’ and ‘1’. Your task is only to tell how many times does A appear as a substring of B? For example, the text string B is ‘1001110110’ while the pattern string A is
‘11’, you should output 3, because the pattern A appeared at the posit
输入The first line consist only one integer N, indicates N cases follows. In each case, there are two lines, the first line gives the string A, length (A) <= 10, and the second line gives the string B, length (B) <= 1000. And
it is guaranteed that B is always longer than A.
输出For each case, output a single line consist a single integer, tells how many times do B appears as a substring of A.
样例输入
3 11 1001110110 101 110010010010001 1010 110100010101011
样例输出
3 0 3
这个题的数据很水,可以使用暴力AC,但是还是使用KMP比较好
1.
//暴力 #include <iostream> #include <cstring> using namespace std; int n; int ans; char a[20], b[1010]; int main() { cin >> n; while (n--){ ans = 0; cin >> a >> b; int lena = strlen(a); int lenb = strlen(b); for (int i = 0; i <= lenb - lena; i++){ for (int j = 0; j < lena; j++){ if (a[j] != b[i + j]){ break; } if (j == lena - 1) ans++; } } cout << ans << endl; } return 0; }
2.
//KMP模板 #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int maxn = 1010; int n; int next[maxn]; char s[maxn], t[maxn]; int slen, tlen; void getNext() { int j = 0, k = -1; next[0] = -1; while (j < slen){ if (k == -1 || s[j] == s[k]) next[++j] = ++k; else k = next[k]; } } int kmp_count() { int ans = 0; int i, j = 0; if (slen == 1 && tlen == 1){ if (s[0] == t[0]) return 1; else return 0; } getNext(); for (i = 0; i < tlen; i++){ while (j > 0 && t[i] != s[j]) j = next[j]; if (s[j] == t[i]) j++; if (j == slen){ ans++; j = next[j]; } } return ans; } int main() { cin >> n; while (n--){ cin >> s >> t; slen = strlen(s); tlen = strlen(t); cout << kmp_count() << endl; } return 0; }
相关文章推荐
- Android多线程总结(转载)
- ROS学习--语音合成&语音识别
- Swift必备开发库(高级篇)
- Swift必备开发库(高级篇)
- JSONKit在iOS9上编译Error解决办法
- exports 和 module.exports 的区别
- ButterKnife笔记
- 采用PHP函数uniqid生成一个唯一的ID
- 微信语音下载到服务器 上传到七牛转换为mp3
- 低功耗蓝牙Bluetooth Low Energy(BLE)
- 各自安好,切勿打扰
- 中文编码解码问题
- 使用 PowerShell 自动化 CloudServices 发布
- SAT问题
- EasyDarwin开源流媒体云平台支持EasyCamera摄像机、EasyCamera手机直播监控、EasyNVR等多终端接入
- 几款Git GUI客户端工具
- EasyDarwin开源流媒体云平台支持EasyCamera摄像机、EasyCamera手机直播监控、EasyNVR等多终端接入
- 软件工程个人总结
- Hadoop源码分析 RPC Server端
- 《编程导论(Java) ·10.3》补充:递归的优化