#include <stdio.h>
#include<iostream>
#include <string.h>
#define _CRT_SECURE_NO_WARNINGS
#define N 1000010
using namespace std;
char s[N], q[N], Q[N];
int ne[N];
int m, n;
int result = 0;
void getNext(char q[]) {
n = strlen(q);//比q的实际长度多1
for (int i = 2, j = 0; i <= n; i++) {
while (j && q[i] != q[j + 1]) j = ne[j];
if (q[i] == q[j + 1]) j++;
ne[i] = j;
}
}
void kmp_compare(char q[], char s[]) {
m = strlen(s);
n = strlen(q);
for (int i = 1, j = 0; i <= m; i++) {
while (j && s[i] != q[j + 1]) j = ne[j];
if (s[i] == q[j + 1]) j++;
if (j == n-1) { result = 1; return; }
}
result = 0;
return;
}
int main() {
while (1) {
cin >> q + 1 >> s + 1;
m = strlen(s);
n = strlen(q);
if (s[1] == '0' && q[1] == '0') break;
kmp_compare(q, s);
if (result) cout << "YES" << endl;
else {
for (int i = 0; i < n - 1; i++) {
Q[1] = q[1];
for (int i = 1; i <= n; i++) {
Q[i] = Q[i + 1];
}
Q[n - 1] = q[1];
kmp_compare(Q, s);
if (result) {
cout << "YES" << endl;
break;
}
}
if (result == 0) cout << "NO" << endl;
}
}
return 0;
}
卡了一个星期了,输出结果全为NO,看不出来为什么过不了,感谢各位帮忙修改我的代码并且指出我的问题,非常感谢