`

UVA Make Palindrome(10453)

 
阅读更多

题目大意:

       给定一个字符串,用最少的插入操作的次数,使得该字符串变为回文。

 

解题思路:

      和UVA(10739) String to Palindrome一样,求出最少的操作次数,唯一不一样的就是这道题要将还原的回文输出出来。

      设置 dp[i][j] 表示第 i 个字符到第 j 个字符是回文时所需要操作的最少次数,字符串为 s , 则状态转移方程为:

if( s[i] == s[j] )
     dp[i][j] = dp[i+1][j-1];
else
     dp[i][j] = min( dp[i+1][j], dp[i][j-1] ) + 1;

 输出dp[0][len]就是最少的操作次数;

        接下来就是如何输出回文字符串,方法就是利用dp[i][j]来递归输出。代码如下:

    if (i > j) return;
    if (i==j) { cout<<s[i]; return; }
    if (s[i] == s[j]) {
        cout<<s[i];   //先输出回文左边的字符
        output(i+1, j-1);    //不断递归直到输出回文中间的字符
        cout<<s[i];    //输出回文右边的字符
    } else if (dp[i][j] == dp[i+1][j] + 1) {
        cout<<s[i];
        output(i+1, j);
        cout<<s[i];
    } else {
        cout<<s[j];
        output(i, j-1);
        cout<<s[j];
    }

 

完整代码如下:

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

char s[2010];
int dp[1010][1010];
int len;

void output( int i, int j )
{
    if (i > j) return;
    if (i==j) { cout<<s[i]; return; }
    if (s[i] == s[j]) {
        cout<<s[i];
        output(i+1, j-1);
        cout<<s[i];
    } else if (dp[i][j] == dp[i+1][j] + 1) {
        cout<<s[i];
        output(i+1, j);
        cout<<s[i];
    } else {
        cout<<s[j];
        output(i, j-1);
        cout<<s[j];
    }
}

int main()
{
	while( cin>>s )
	{
		memset( dp, 0, sizeof( dp ) );

		len = strlen( s );
		for( int i = len-2; i >= 0; i-- )
		{
			for( int j = i+1; j < len; j++ )
			{
				if( s[i] == s[j] )
					dp[i][j] = dp[i+1][j-1];
				else
				{
					dp[i][j] = min( dp[i+1][j], dp[i][j-1] ) + 1;
				}
			}
		}
		cout<<dp[0][len-1]<<" ";
		
		output( 0, len-1 );

		cout<<endl;
	}
	return 0;
}

 

分享到:
评论

相关推荐

    java-leetcode题解之Can Make Palindrome from Substring.java

    java java_leetcode题解之Can Make Palindrome from Substring.java

    POJ1159-Palindrome

    【标题】"POJ1159-Palindrome" 是北京大学在线编程平台POJ上的一道编程题目。这道题目主要考察的是字符串处理和回文判断的知识点。 【描述】"北大POJ1159-Palindrome 解题报告+AC代码" 暗示了解决这道问题的方法和...

    c语言-1312-minimum-insertion-steps-to-make-a-string-palindrome

    c语言入门 c语言_1312_minimum_insertion_steps_to_make_a_string_palindrome

    Pku acm 第1159题 Palindrome 代码

    Pku acm 第1159题 Palindrome 代码,有详细的注释,动态规划

    palindrome

    《回文:数据结构的魅力与应用》 回文,这个看似简单的词汇,实则蕴含了丰富的数学和计算机科学内涵。在中文中,回文是指正读反读都能保持相同的词语,如“上海自来水来自海上”。而在计算机领域,尤其是数据结构中...

    JAVA程序 Palindrome(回文?)

    JAVA程序 Palindrome.java 输入任何字母数字组合 检查是否是回文结构? 例:abccba 从左往右看 和 从右往左看一样 为回文结构 包括检查是否带标点符号 检查是否有空格 如a bccba 输入带空格 仍为回文结构

    LeetCode9 Palindrome Number

    《LeetCode9:判断回文数——Java实现详解》 在编程的世界里,LeetCode是一个广受欢迎的在线平台,它提供了各种算法问题供程序员们挑战和提升技能。今天我们要探讨的是LeetCode第9题——“回文数”。...

    Palindrome Sub-Array

    Palindrome Sub-Array,Problem Description  A palindrome sequence is a sequence which is as same as its reversed order. For example, 1 2 3 2 1 is a palindrome sequence, but 1 2 3 2 2 is not. Given a 2-...

    PalindromeNumber.java

    PalindromeNumber.java

    Palindrome.java

    回文数Java

    palindrome22.in

    palindrome22.in

    北大POJ1159-Palindrome

    北大POJ1159-Palindrome

    C++实现的Palindrome,回文

    在编程领域,回文是一种特殊的字符串,它从前向后读和从后向前读是一样的,例如"madam"、"racecar"等。本主题主要关注如何使用C++语言来实现回文检测算法。C++作为一门强大的面向对象编程语言,提供了丰富的标准库和...

    palindrome_prime.c

    palindrome_prime.c

    huiwenshu.rar_palindrome

    最近,我接触了一个项目“huiwenshu.rar_palindrome”,该项目的目标是开发一个能够处理1-99999位数回文数判断的程序,同时,这个项目还涉及到了银行管理系统的部分功能,如利率计算、密码管理以及余额管理。...

    UVA100~200---52道题accept代码,均顺利accept过

    3. **UVA131 - Palindrome**:这是一个关于回文串的问题,要求检查一个字符串是否是回文。可以使用双指针法或翻转字符串的方法来解决。 4. **UVA152 - The Stock Maximal Sequence**:此题属于动态规划,要求找到...

    Palindrome.py

    Palindrome.py

    PyPI 官网下载 | check-palindrome-kriti-0.0.1.tar.gz

    《PyPI官网下载:探索check-palindrome-kriti-0.0.1.tar.gz中的Python库知识》 PyPI(Python Package Index)是Python开发者的重要资源库,它提供了丰富的Python库供全球开发者下载和使用。本文将深入探讨标题为...

    SPIM 计算字符串是否为palindrome

    检查字符串是否为palindrome, 从前后分别检查,并计算出相同或不同的数量。

    java-palindrome-example:一个示例Java服务

    GET /java-palindrome-example/palindrome/ 解析提供的字符串,并找到其中包含的最大回文。 在此情况下,也可以将type的可选查询参数设置为slow在这种情况下,服务将使用慢得多的递归算法。 例子 GET /java-...

Global site tag (gtag.js) - Google Analytics