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;
}

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

相关文章推荐

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反过来接一起,然后后缀数组。

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...

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

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

1354. Palindrome. Again Palindrome

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

POJ 1159 Palindrome(回文串,最长公共子序列)

Palindrome Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 63457 ...

leetcode 214. Shortest Palindrome leetcode 5. Longest Palindromic Substring回文串相关

leetcode 214. Shortest Palindrome 一看这道题第一反应就是先找出以str[0]为起点的最长的回文子串,然后,将这个回文子串后面的子串反转再拼接到前面。 然后第一步,看看...

Leetcode 125. Valid Palindrome 回文验证 解题报告

1 解题思想就一个简单的判断一个string里面的字符和数字部分,是否是回文的,不考虑符号和大小写等其实说白了,就首尾指针对比一下就好。。 我代码里面首尾不同的地方时过滤下非字符数字2 原题Given...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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