首页 > 代码库 > UVA 11475 - Extend to Palindrome(KMP)
UVA 11475 - Extend to Palindrome(KMP)
UVA 11475 - Extend to Palindrome
题目链接
题意:给定一个字符串,问需要补上最少的字符使他变成回文串
思路:KMP,把字符串逆序和原串做匹配,匹配到最后一个字符看匹配了多少个,就是最大重合部分,然后相应输出即可
代码:
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int MAXLEN = 100005; struct KMP { int next[MAXLEN]; void getnext(char *str) { int n = strlen(str); next[1] = 0; int j = 0; for (int i = 2; i <= n; i++) { while (j && str[j] != str[i - 1]) j = next[j]; if (str[j] == str[i - 1]) j++; next[i] = j; } } void find(char *T, char *s) { int n = strlen(T); getnext(s); int j = 0; for (int i = 0; i < n; i++) { while (j && T[i] != s[j]) j = next[j]; if (T[i] == s[j]) j++; } printf("%s%s\n", T, s + j); } }; KMP gao; char a[MAXLEN], b[MAXLEN]; int main() { while (~scanf("%s", a)) { strcpy(b, a); reverse(b, b + strlen(b)); gao.find(a, b); } return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。