给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?

给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?

输出需要删除的字符个数。

输入描述:

输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.

输出描述:

对于每组数据,输出一个整数,代表最少需要删除的字符个数。


输入例子:

abcda

google

输出例子:

2

2

#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;

const int MAXN=1010;
int temp[MAXN][MAXN];

//先求s的反串reverse,然后求他们的最长的公共子序列,要删除的字符个数就能知道
//时间复杂度O(N^2)

int getRemoveNumber(string &s1)
{
    string s2(s1);
    reverse(s2.begin(),s2.end());
    int len=s1.length();
    memset(temp,0,sizeof temp);
    for(int i=0;i<len;++i)
    {
        for(int j=0;j<len;++j)
        {
            if(s1[i]==s2[j])
                temp[i+1][j+1]=temp[i][j]+1;
            else temp[i+1][j+1]=max(temp[i][j+1],temp[i+1][j]);
        }
    }
    return len-temp[len][len];
}

int main()
{
   string s;
   while(cin>>s)
   {
       cout<<getRemoveNumber(s)<<endl;
   }
   return 0;
}
时间: 2024-08-02 19:24:17

给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?的相关文章

又一个字符串,由全角字符,半角字符构成,如何截取该字符串,全角算两个字符

问题描述 又一个字符串,由全角字符,半角字符构成,如何截取该字符串,全角算两个字符 解决方案 解决方案二:看看这个是你要的吗?///<summary>///取中文字串///</summary>///<paramname="content">内容</param>///<paramname="length">长度</param>///<returns></returns>pr

visual studio-C#中@和$修饰一个字符串,分别有什么不同,vs2015编程

问题描述 C#中@和$修饰一个字符串,分别有什么不同,vs2015编程 C#中@和$修饰一个字符串,分别有什么不同,vs2015编程 解决方案 @取消字符串中的转义,$,对字符串求值,举例: int a = 1; string s1 = "hellot{a}"; string s2 = @"hellot{a}"; string s3 = $"hellot{a}"; 结果 s1 hello {a} s2 hellot{a} s3 hello 1 解

node的buffer乱码-node里面用Buffer声明一个字符串乱码

问题描述 node里面用Buffer声明一个字符串乱码 在学习node的过程中遇到,用Buffer声明一个字符串出现乱码,是怎么回事,本人菜鸟,望各位大大帮助下下! 解决方案 没用过NODE,但是一般编程语言里面是转移符,试一下D:12a.txt

php检查字符串中是否包含7位GSM字符的方法_php技巧

本文实例讲述了php检查字符串中是否包含7位GSM字符的方法.分享给大家供大家参考.具体分析如下: 下面的代码检查一个字符串是否包含任何7位GSM字符.它对短信平台上工作的人非常有用. <?php function check_gsm($str) { $arr = array( "0x00", "0x01", "0x02", "0x03", "0x04", "0x05","

sql 删除左右字符之trim()函数用法

程序中的Trim函数大伙都知道的,但是要SQL中只有LTRIM,RTRIM删除左.右空白字符,而不能删除指定字符,所以我们自己写一个. 要求: 1. 能删除前后空白,如 ' aa ' -> 'aa' 2. 能删除前后字符,并不受空白影响,如 ' ;aa' -> 'aa' 3. 删除前后字符后,需清除前后空格,如 '; aa' -> 'aa' 4. 需删除前后连续的字符,如 ';;;aa' -> 'aa' 网上也有一些别人写的,我觉得很不错,不过貌似没有完整的能达到要求的,所以自己动

java-给HTTP链接的一个字符串中删除空白

问题描述 给HTTP链接的一个字符串中删除空白 我想发送一个查询的url: String url = String.format( "http://xxxxx/xxx/xxx&message=%s",myEditBox.getText.toString()); // Create a new HttpClient and Post Header DefaultHttpClient httpclient = new DefaultHttpClient(); HttpPost ht

c语言 字符-从键盘输入任意一个字符串和一个字符,要求从该字符串中删除所有该字符。

问题描述 从键盘输入任意一个字符串和一个字符,要求从该字符串中删除所有该字符. 题目要求 Problem Description 从键盘输入任意一个字符串和一个字符,要求从该字符串中删除所有该字符. Input 输入有多组测试数据. 每组两行,第一行是字符串(字符串至少还有一个字符,不多于100个),第二行是一个字符 Output 每组输出一行,删除了所有应删除字符后的字符串 Sample Input ABCDE E ASD Dfg fhd D Sample Output ABCD AS fg

input标签的操作-input标签一次删除一个字符串问题

问题描述 input标签一次删除一个字符串问题 一个input标签删除内容的问题,我在input标签里内容格式为 : [xq]小强;[xh]小红;[xm]小明; 我想点删除键的时候,光标在哪个名字中,则把对应的名字删除:怎么实现,求大神指导 解决方案 JavaScript可以获得光标位置,然后你根据这个位置判断在哪个名字处,在做下一步处理http://www.oschina.net/code/snippet_4873_3394 解决方案二: 这样的功能别用input了,找找div样式吧

c++-编写程序,输入任意一个含有空格的字符串(至少10个字符),删除指定字符后输出该字符串。

问题描述 编写程序,输入任意一个含有空格的字符串(至少10个字符),删除指定字符后输出该字符串. 编写程序,输入任意一个含有空格的字符串(至少10个字符),删除指定字符后输出该字符串.例如,输入"jiangsu123"和删除位置5,则输出"jiansu123". 解决方案 #include <iostream> #include <string> using namespace std; int main() { char s1[100];