URAL 1354 Palindrome. Again Palindrome (回文 + KMP)

原创 2015年11月20日 00:05:53
#include <stdio.h>

char string[10001];
char reverseString[10001];
int next[10001];

int main(){

	scanf("%s", string);
	int len = 0;
	int index;
	for (index = 0; string[index] != '\0'; index++){
		len++;
	}

	int reverseIndex = 0;
	for (index = len - 1; index >= 0; index--){
		reverseString[reverseIndex++] = string[index];
	}
	reverseString[reverseIndex] = '\0';

	int prefix = -1;
	int suffix = 0;
	next[suffix] = -1;
	//注意边界不是len
	while (suffix < len - 1){
		if (-1 == prefix || reverseString[prefix] == reverseString[suffix]){
			prefix++;
			suffix++;
			if (reverseString[prefix] != reverseString[suffix]){
				next[suffix] = prefix;
			} else {
				next[suffix] = next[prefix];
			}
		} else {
			prefix = next[prefix];
		}
	}

	//用KMP算法求输入字符的反串的前缀在输入字符串第1个字符之后的位置
	index = 1;
	reverseIndex = 0;
	while (index < len){
		if (string[index] == reverseString[reverseIndex] || -1 == reverseIndex){
			index++;
			reverseIndex++;
		} else {
			reverseIndex = next[reverseIndex];
		}
	}

	printf("%s", string);
	while (reverseIndex < len){
		printf("%c", reverseString[reverseIndex++]);
	}
	printf("\n");	

	return 0;
}

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

ural -1297. Palindrome----后缀数组解决最长回文串的问题

此题就是问一个只含有字母的的字符串中的最长的回文串是什么。如果有多解的话,打印出最先出现的那个。 首先考虑到回文串的特点。那么我们的肯定想到将字符串反转,并加到原字符串后面,用一个字符隔开。然后就是...

ural 1297 Palindrome (后缀数组 最长回文)

以下分析部分摘自 后缀数组两种算法的分析比较 - Localhost 8080 - C++博客

UVa 10617 Again Palindrome(回文 区间dp)

A palindorme is a sequence of one or more characters that reads the same from the left as it does fr...

ural1297 Palindrome,hdu 3068 最长回文,Manacher

在昨天多校的凸包被卡之后,我已经发现用poj测模板是作死的最好方式。 所以又水了两道。 ural 1297. Palindrome 这里要求输出回文串。 理解一下模板len[i]的含义...

ural 1297Palindrome(求最长回文)

这个数据比较弱, 暴力就可以过……还可以DP, 后缀树组…… 暴力就不说了…… Manacher算法:看连接http://blog.csdn.net/tanhaiyuan/article/...

URAL 1297(Palindrome,后缀数组)最长回文串

把A反过来接一起,然后后缀数组。

JAVA程序 Palindrome(回文?)

  • 2013年06月09日 12:14
  • 3KB
  • 下载

1354. Palindrome. Again Palindrome

原文地址:   http://acm.timus.ru/problem.aspx?space=1&num=1354 关于字符串回文的求解.  要求在原有基础上补长(长度最短), 使得到的字符...

1159 Palindrome(最少插入回文串)

题目大意给出一个串的长度,

分割成回文需要的最小分割数 Palindrome Partitioning II @LeetCode

两个DP,用DFS肯定通不过。 参考:http://yucoding.blogspot.com/2013/08/leetcode-question-133-palindrome.html ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:URAL 1354 Palindrome. Again Palindrome (回文 + KMP)
举报原因:
原因补充:

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