Palindrome
来源:互联网 发布:mac 当前用户路径 编辑:程序博客网 时间:2024/05/21 09:26
Description
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
Output
Sample Input
5Ab3bd
Sample Output
2
Source
/*题意:
给一串字符,问最少加多少个字符可以使它变成回文字符串。
(回文字符串=从左往右看 和 从右往左看 串相同*/
//方法一;非递归;
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
short dp[5005][5005];//计入构成回文串所需加的最小字符;
char a[5005];
int main()
{
int n;
while(~scanf("%d",&n))
{
getchar();//取消回车;
gets(a);
for(int i=0;i<n;i++)
{
dp[i][i]=0;//初始化:
dp[i][i+1]=(a[i]==a[i+1]?0:1);
}
for(int i=1;i<=n;i++)
for(int j=0;j<n-i;j++)//注意范围;
{
if(a[j]==a[j+i])
dp[j][j+i]=dp[j+1][j+i-1];//移到下一组;
else
dp[j][j+i]=min(dp[j][j+i-1],dp[j+1][j+i])+1;//增加一字符;
}
cout<<dp[0][n-1]<<endl;
}
return 0;
}
/*
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
char a[5005];
int dp[5005][5005];
int getdp(int i,int j)//成为字符串的最小插入字符数,递归法;
{
if(i==j)//一个字符;
return 0;
if(i+1==j)//两个字符;
return a[i]==a[j]?0:1;
if(dp[i][j]!=-1)//最小插入的字符数;
return dp[i][j];
if(a[i]==a[j])
return dp[i][j]=getdp(i+1,j-1);
else
return dp[i][j]=min(getdp(i,j-1),getdp(i+1,j))+1;
}
int main()
{
int n;
while(~scanf("%d",&n))
{
getchar();
gets(a);
memset(dp,-1,sizeof(dp));
cout<<getdp(0,n-1)<<endl;
}
}
- palindrome
- Palindrome
- Palindrome
- Palindrome
- Palindrome
- Palindrome
- Palindrome
- Palindrome
- palindrome
- Palindrome
- Palindrome
- Palindrome
- Palindrome
- Palindrome
- Palindrome
- palindrome
- Palindrome
- Palindrome
- Bouguet极线校正的方法
- LeetCode oj 344. Reverse String(字符串)
- Java实现图的遍历(深度优先与广度优先遍历)
- 【JDBC】基本操作
- boost库 win7 vs2013安装
- Palindrome
- Grunt介绍与应用
- php中cookies禁用如何获取session
- 球形检测
- 【BZOJ1079】【codevs2428】着色方案,DP
- error: Apostrophe not preceded by \ (in CREATE TABLE tb_cammonitor_configs
- Android个人学习小结2016.9
- 2012蓝桥杯预赛试题本科c++比酒量
- 如何修改Ruby的gem源(gem sources)