UVa 11475 - Extend to Palindrome

Posted claireyuancy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVa 11475 - Extend to Palindrome相关的知识,希望对你有一定的参考价值。

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

分析: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;
}


以上是关于UVa 11475 - Extend to Palindrome的主要内容,如果未能解决你的问题,请参考以下文章

UVa 11475 - Extend to Palindrome

UVA 11475 Extend to Palindrome(hash)题解

Extend to Palindrome UVA - 11475 (后缀数组)

UVA 11475 Extend to Palindrome(后缀数组+ST表)

UVA 11475 后缀数组/KMP

easyui dialog 扩展load