码迷,mamicode.com
首页 > 其他好文 > 详细

UVa 11475 - Extend to Palindrome

时间:2017-06-28 23:18:14      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:利用   tar   pop   算法   回文串   ++   scan   turn   比较   

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

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

标签:利用   tar   pop   算法   回文串   ++   scan   turn   比较   

原文地址:http://www.cnblogs.com/claireyuancy/p/7091734.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!