Palindrome
来源:互联网 发布:c语言画线函数 编辑:程序博客网 时间:2024/05/18 02:49
C - Palindrome
Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64uDescription
A palindrome is a symmetrical string, that is, a string read identically from left to right as well as from right to left. You are to write a program which, given a string, determines the minimal number of characters to be inserted into the string in order to obtain a palindrome.
As an example, by inserting 2 characters, the string "Ab3bd" can be transformed into a palindrome ("dAb3bAd" or "Adb3bdA"). However, inserting fewer than 2 characters does not produce a palindrome.
As an example, by inserting 2 characters, the string "Ab3bd" can be transformed into a palindrome ("dAb3bAd" or "Adb3bdA"). However, inserting fewer than 2 characters does not produce a palindrome.
Input
Your program is to read from standard input. The first line contains one integer: the length of the input string N, 3 <= N <= 5000. The second line contains one string with length N. The string is formed from uppercase letters from 'A' to 'Z', lowercase letters from 'a' to 'z' and digits from '0' to '9'. Uppercase and lowercase letters are to be considered distinct.
Output
Your program is to write to standard output. The first line contains one integer, which is the desired minimal number.
Sample Input
5Ab3bd
Sample Output
2
找最多添加多少个字母变成回文串。 用字符串本身与它的逆序串求一下公共子序列(LCS)就好了。求完用字符串总长减去LCS的长度就是了.
#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>using namespace std;const int maxn = 5010;char s[maxn],str[maxn];int dp[2][maxn];int n;int main(){while(scanf("%d",&n) != EOF){memset(dp,0,sizeof(dp));scanf("%s",str);for(int i=0; i<n; ++i){s[n-1-i] = str[i];}for(int i=1; i<=n; ++i){for(int j=1; j<=n; j++){if(s[i-1] == str[j-1]){dp[i%2][j] = dp[(i-1)%2][j-1] + 1;}else{dp[i%2][j] = max(dp[(i-1)%2][j],dp[i%2][j-1]);}}}printf("%d\n",n - dp[n%2][n]);}return 0;}
0 0
- palindrome
- Palindrome
- Palindrome
- Palindrome
- Palindrome
- Palindrome
- Palindrome
- Palindrome
- palindrome
- Palindrome
- Palindrome
- Palindrome
- Palindrome
- Palindrome
- Palindrome
- palindrome
- Palindrome
- Palindrome
- C++学习笔记——erase删除字符串中特定字符 由leetcode383题想到的
- dojox.widget.rotator.Controller
- HDU 5773 The All-purpose Zero
- 如何快捷的判断一批索引中不存在的或 close 的索引
- 桥梁模式
- Palindrome
- 跟着9张思维导图学习Javascript
- 进程间通信——AIDL实例演示
- 安装python3.5.2 error code is 2503
- JAVA学习代码——File文件
- div完成田字格布局
- 对MIME(Multipurpose Internet Mail Extensions)的简介
- HDOJ-----1087Super Jumping! Jumping! Jumping!(DP)
- tyvj 1008 传球游戏