南阳5--Binary String Matching(Kmp)
生活随笔
收集整理的这篇文章主要介绍了
南阳5--Binary String Matching(Kmp)
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
Binary String Matching
时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述kmp 裸题;
#include <cstdio> #include <cstring> #include <iostream> using namespace std; char a[15], b[1010]; int p[1010], lena, lenb, ans; void Getp() {int i = 0, j = -1;p[i] = j;while(i != lena){if(j == -1 || a[i] == a[j]){i++, j++;p[i] = j; } elsej = p[j];} } void Kmp() {Getp();int i = 0, j = 0;while(i != lenb){if(j == -1 || b[i] == a[j]) i++, j++;else j = p[j];if(j == lena)ans++; } printf("%d\n", ans); } int main() {int t;scanf("%d", &t);while(t--){ans = 0;scanf("%s%s", a, b);lena = strlen(a);lenb = strlen(b);Kmp();}return 0; }
暴力: 竟然也是 0 ms;
#include <cstdio> #include <cstring> #include <iostream> using namespace std; char a[15], b[1010]; int lena, lenb; int main() {int t;scanf("%d", &t);while(t--){int i, j, sum = 0;scanf("%s %s", a, b);int lena = strlen(a), lenb = strlen(b);for(i = 0; i <= lenb - lena; i++){if(b[i] == a[0]){for(j = 1; j < lena; j++)if(b[i+j] != a[j])break;if(j == lena)sum++;} }printf("%d\n", sum);} return 0; }
转载于:https://www.cnblogs.com/soTired/p/4749391.html
总结
以上是生活随笔为你收集整理的南阳5--Binary String Matching(Kmp)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 【原创】多线程应用中pthread库使用
- 下一篇: 汉字内码