UVa 11475 - Extend to Palindrome

原创 2015年07月09日 17:07:08

題目:給你一個字符串,在後面拼接一部分使得它變成回文串,使得串最短,輸出這個回文串。

分析:KMP,dp。這裡利用KMP算法將串和它的轉置匹配,看結束時匹配的長度即可。

            因為串比較長,使用KMP比較合適,KMP原理請參照AC自動機總結

說明:╮(╯▽╰)╭。

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

char strA[100001];
char strB[100001];
int  next[100001];

void getnext(char T[])  
{  
    next[0] = -1;
    int i = 0, j = -1;  
    while (T[i]) {  
        if (j == -1 || T[i] == T[j]) {
			++ i; ++ j;
			if (T[i] != T[j])
				next[i] = j;
            else next[i] = next[j];  
        }else j = next[j];  
    }
}  

int KMP(char S[], char T[])
{
	int i = 0, j = 0;
	while (S[i]) {
		if (j == -1 || S[i] == T[j]) {
			i ++; j ++;
		}else j = next[j];
	}
	return j;
}

int main()
{
	while (~scanf("%s",strA)) {
		int len = strlen(strA);
		for (int i = 0; i < len; ++ i)
			strB[i] = strA[len-1-i];
		strB[len] = 0;
		getnext(strB);
		
		printf("%s%s\n",strA,&strB[KMP(strA, strB)]);
	}
    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

uva11475

这个题叭。。。 就是求如何用

UVa11475 - Extend to Palindrome

题目大意:      给你一个字符串,rann

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

UVa 11475-Extend to Palindrome JAVA

 Your task is, given an integer N, to make a palidrome (word that reads the same when y...

UVA - 11475 Extend to Palindrome manacher+贪心

题意:给出一个字符串,在末尾添加尽可能少的字符串,使这个新字符串为回文串,输出新字符串。 manacher+贪心 先用manacher O(n)的跑出原字符串的以每个i为中心的回文子串, 然后应该自己...

UVA-11475-Extend to Palindrome((扩展)kmp)

UVA-11475-Extend to Palindrome((扩展)kmp)题目: Your task is, given an integer N, to make a palidrome (w...

UVA 11475 Extend to Palindrome (kmp || manacher || 后缀数组)

题目链接:点击打开链接 题意:给你一个串,让你在串后面添加尽可能少的字符使得这个串变成回文串。 思路:这题可以kmp,manacher,后缀数组三种方法都可以做,kmp和manacher效率较高,...

UVA11475--Extend to Palindrome

Your task is, given an integer N, to make a palidrome (word that reads the same when you reverse it)...

UVA 10739 String to Palindrome

动态规划的题目,dp[i][j]表示的是将字符串从位置i到位置j的子串变为

uva 10739 String to Palindrome

uva 10739 String to Palindrome

UVA 10739--String to Palindrome +dp

字符串区间dp。 定义dp[i][j]表示将i--j之间的字符串变为回文串所需的最小步数 当str[i]==str[j]时 dp[i][j]=dp[i+1][j-1]; 当str[i]!=str[j]...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)