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 1354. Palindrome. Again Palindrome

题意:给定一字符串,在其后加一个
  • u012891242
  • u012891242
  • 2014年08月31日 17:53
  • 424

LeetCode234_PalindromeLinkedList (判断是否为回文链表) Java题解

题目: Given a singly linked list, determine if it is a palindrome. Follow up: Could you do it...
  • u012249528
  • u012249528
  • 2015年07月29日 11:40
  • 2960

Ural 1354. Palindrome. Again Palindrome KMP的应用

1354. Palindrome. Again Palindrome Time limit: 1.0 second Memory limit: 64 MB A word is the none...
  • jyysc2010
  • jyysc2010
  • 2013年07月27日 12:15
  • 517

1354. Palindrome. Again Palindrome

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

Palindrome. Again Palindrome

1354. Palindrome. Again Palindrome Time limit: 1.0 second Memory limit: 64 MB A word is t...
  • yhb1216776494
  • yhb1216776494
  • 2013年08月09日 07:32
  • 491

URAL1297:Palindrome(后缀数组)

Description The “U.S. Robots” HQ has just received a rather alarming anonymous letter. It state...
  • libin56842
  • libin56842
  • 2015年05月31日 00:40
  • 1645

leetCode解题报告之Palindrome Partitioning I,II(DFS,DP)

Palindrome Partitioning I, II DFS 和 DP动态规划问题 首先我们先定义几个变量,并对这几个量做一定的说明!为了方便理解,下面这些为伪码!!! len = s...
  • u011133213
  • u011133213
  • 2014年03月31日 01:02
  • 20359

Leetcode Shortest Palindrome (最短回文串)

Leetcode Shortest Palindrome (最短回文串) 题目描述 Given a string S, you are allowed to c...
  • yujin753
  • yujin753
  • 2015年07月24日 21:28
  • 2604

【ural】1996. Cipher Message 3【FFT+KMP】

传送门:【ural】1996. Cipher Message 3题目大意:问至少将多少个AA串的字节的最低位取反使得BB串是AA串的子串。题目分析:可以发现,只要将BB串翻转一下,AA串和BB串的匹配...
  • u013368721
  • u013368721
  • 2015年05月07日 14:55
  • 867

URAL 2040 Palindromes and Super Abilities 2(回文树)

URAL 2040 Palindromes and Super Abilities 2(回文树)
  • Dacc123
  • Dacc123
  • 2016年05月10日 08:21
  • 829
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:URAL 1354 Palindrome. Again Palindrome (回文 + KMP)
举报原因:
原因补充:

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