LightOJ 1258 - Making Huge Palindromes

来源:互联网 发布:相同文件查找软件 编辑:程序博客网 时间:2024/04/29 20:15

字符串问题。

#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;elsenext[j] = next[k];}elsek = 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;}


0 0