字符串_构造回文字符串

原创 2018年04月15日 21:33:32

题目描述

给定一个字符串,删去若干个字符后使其成为一个回文字符串,求最少删除字符的数量使其成为一个最长的回文字符串。例如abab这个字符串,最少可以删除一个字符使其称为长度为3的字符串aba或者bab

样例输入

book
abcaba

样例输出

2
1

解题思路

删去若干个字符使字符串变成回文字符串, 意味着去发现字符串中原有的“潜在回文串”,何谓潜在回文串?就是忽略掉中间不相干的字符后就可以变成回文串的部分,即“不连续“的回文串,换句话说,就是回文序列。这样问题就转化为了求一个字符串中最长的回文子序列的问题,于是就可以求这个字符串和它的反串的LCS, 求出这个最大长度后,用字符串原来的长度减去最大长度即为删去最少字符的个数。

参考代码

#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>

using namespace std;
const int size = 1000 + 10;
int DP[size][size];

int LCS(string s, string t){
    int len1 = s.length();
    int len2 = t.length();
    memset(DP, 0, sizeof(DP));
    for (int i=1; i<=len1; i++){
        for (int j=1; j<=len2; j++){
            if (s[i-1] == t[j-1]){
                DP[i][j] = DP[i-1][j-1] + 1;
            }
            else {
                DP[i][j] = max(DP[i-1][j], DP[i][j-1]);
            }
        }
    }
    return DP[len1][len2];
}
int main(){
    string s;
    while (cin >> s){
        int len;
        string t(s);
        reverse(t.begin(), t.end());
        len = LCS(s, t);
        cout << s.length() - len << endl;
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tsing1996/article/details/79953626

构造回文字符串

题目描述 一个字符串是回文字符串当且仅当这个字符串从左向右读和从右向左读是一样的,比如:aba, cddc。 现在给定一个字符串,问你,最少添加多少个字符,可以使得字符串变成回文字符串...
  • Donald_TY
  • Donald_TY
  • 2016-07-05 17:33:57
  • 1877

腾讯笔试题 构造回文字符串

题目描述:给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?输出需要删除的字符个数输入描述:输入数据有多组,每组包含一个字符串s,且保证:1...
  • u012150590
  • u012150590
  • 2016-07-01 22:35:55
  • 3581

牛客网-构造回文字符串

今天的题目非常有点意思,在题目给定的字符串上构造回文子串,题目具体如下: 初看这道题目好像套路不一样,在一个给定的字符串中构造回文串?因为字符的长度在[1,1000]之间,所以回文串的最小长度...
  • caoyan_12727
  • caoyan_12727
  • 2016-07-17 22:58:44
  • 912

构造回文串(LCS)

problem一个字符串如果从左往右读和从右往左读都一样,那么这个字符串是一个回文串。例如:abcba ,abccba。蕊蕊想通过添加字符把一个非回文字符串变成回文串。例如:"mecm",可以添加一个...
  • Feynman1999
  • Feynman1999
  • 2017-09-02 16:19:52
  • 224

回文字符串的判断

  • 2011年11月18日 16:52
  • 328B
  • 下载

牛客网答题笔记---构造回文

题目描述:给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数。分析在一个长的串中找到最长的那个回文串,也就是最长回文串序列。 ...
  • tingyun_say
  • tingyun_say
  • 2016-08-30 22:39:05
  • 867

字符串删除字符的回文字符串

*问题:给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?分析:提到回文串,自然要利用回文串的特点,想到将源字符串逆转后,“回文串”(不一定连续)相当于...
  • ltb_args
  • ltb_args
  • 2017-12-11 22:18:16
  • 177

2017百度校园招聘编程题 删除字符构造最长回文字符串(求最长公共子序列的变种)

题目 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?  输出需要删除的字符个数 输入描述 输入数据有多组,每组包含一个字符串s,且保证:1 ...
  • qq_26222859
  • qq_26222859
  • 2017-03-24 14:55:44
  • 188

构造回文_腾讯实习生编程题

题目: 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数。 输入描述: 输入数据有多组,每组包含一个字符...
  • u011707827
  • u011707827
  • 2016-09-02 16:35:22
  • 280

可删除某些字符的最长回文字符串(2016腾讯在线笔试题)

输入:amka时,删除字符m可以得到最长回文字符串aka,则输出3 输入:abcddcka,删除b和k时,acddca是最长回文字符串,输出6 思路:用两个指针,一个指向字符串一个字符,一个指向字...
  • ly52352148
  • ly52352148
  • 2016-05-18 20:45:03
  • 708
收藏助手
不良信息举报
您举报文章:字符串_构造回文字符串
举报原因:
原因补充:

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