#include <iostream> #include <stdio.h> #include <algorithm> #include <cstring> using namespace std; const int maxn = 1001; char s[maxn], p[maxn]; int Next[maxn]; void cal_next(int len) { for (int i = 1; i < len; i++) { int j = Next[i - 1]; while (j > 0 && p[j] != p[i]) j = Next[j - 1]; if (p[i] == p[j]) Next[i] = j + 1; else Next[i] = 0; } } void KMP(int len1, int len2) { int i = 0, j = 0; while (i < len1) { if (s[i] == p[j]) { if (j == len2 - 1) { cout << i - len2 + 2 << endl; return; } i++; j++; } else { if (j == 0) i++; else j = Next[j - 1]; } } cout << "0" << endl; } int main() { while (cin >> s >> p) { int len1 = strlen(s); int len2 = strlen(p); cal_next(len2); KMP(len1, len2); } return 0; }
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:703 |
C语言程序设计教程(第三版)课后习题6.7 (C语言代码)浏览:780 |
C二级辅导-同因查找 (C语言代码)浏览:555 |
C语言训练-斐波纳契数列 (C语言代码)浏览:2811 |
C语言程序设计教程(第三版)课后习题8.8 (C语言代码)浏览:584 |
计算质因子 (C++代码)浏览:1618 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:625 |
简单的a+b (C语言代码)浏览:596 |
C语言程序设计教程(第三版)课后习题10.4 (C语言代码)浏览:535 |
时间转换 (C语言代码)浏览:624 |