字符串问题。
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
using namespace std;
const int MAX = 1e6 + 5;
int next[MAX];
void get_next(string& str, int* next)
{
int lenth = str.size();
int k = -1, j = 0;
next[0] = -1;
while (j != lenth)
{
if (k == -1 || str[j] == str[k])
{
k++;
j++;
if (str[j] != str[k])
next[j] = k;
else
next[j] = next[k];
}
else
k = next[k];
}
}
int kmp(string& str, string& p)
{
get_next(p, next);
int lenth1 = str.size();
int lenth2 = p.size();
int i = 0, j = 0;
while (i != lenth1 && j != lenth2)
{
if (j == -1 || str[i] == p[j])
{
++i;
++j;
}
else
{
j = next[j];
}
}
return lenth1 + lenth2 - j;
}
int main()
{
int t, cas = 0;
scanf("%d", &t);
while (t--)
{
string str1;
cin >> str1;
string str2(str1.rbegin(), str1.rend());
printf("Case %d: %d\n", ++cas, kmp(str1, str2));
}
return 0;
}