1 構造回文(2017 6 18)

2021-08-02 18:03:52 字數 1253 閱讀 7605

題目:

[程式設計題] 構造回文

時間限制:1秒

空間限制:32768k

給定乙個字串s,你可以從中刪除一些字元,使得剩下的串是乙個回文串。如何刪除才能使得回文串最長呢?

輸出需要刪除的字元個數。

輸入描述:

輸入資料有多組,每組包含乙個字串s,且保證:1<=s.length<=1000.

輸出描述:

對於每組資料,輸出乙個整數,代表最少需要刪除的字元個數。

輸入例子:

abcda

google

輸出例子:

2

2

解題思路:

思路:回文串的特點是,逆序輸出和正序輸出是一樣的。所以這道題可以從這方面來考慮。如果將此字串逆序輸出,那麼兩個字串的最長公共子串行將是最長的回文字串,那麼剩餘的值將是要刪除的字元個數。

求lcs的方法可以在csdn中找到。

//先求s的反串reverse,然後求他們的最長的公共子串行,要刪除的字元個數就能知道

//時間複雜度o(n^2)

c++版本答案

#include #include #include using namespace std;

const int maxn=1010;

int temp[maxn][maxn];

//先求s的反串reverse,然後求他們的最長的公共子串行,要刪除的字元個數就能知道

//時間複雜度o(n^2)

int getremovenumber(string &s1)

}public static int getresult(string str){

stringbuilder sb = new stringbuilder(str);

string newstr = sb.reverse().tostring();

char c1 = str.tochararray();

char c2 = newstr.tochararray();

int n = str.length();

int dp = new int[n+1][n+1];

for(int i=1;i附:

這道題目考察了動態規劃,最重要的是要找出動態方程

構造回文串

給定乙個字串s,你可以從中刪除一些字元,使得剩下的串是乙個回文串。如何刪除才能使得回文串最長呢?輸出需要刪除的字元個數。輸入描述 輸入資料有多組,每組包含乙個字串s,且保證 1 s.length 1000.輸出描述 對於每組資料,輸出乙個整數,代表最少需要刪除的字元個數。輸入例子 abcda goo...

構造回文 最長回文子串

題目 給定乙個字串s,你可以從中刪除一些字元,使得剩下的串是乙個回文串。如何刪除才能使得回文串最長呢?輸出需要刪除的字元個數。1 s.length 1000。輸入 abcda google 輸出 2 2思路 我本沒有思路 回文串的特點是正著讀和反著讀一樣,假設原來字串是s,求它的反串,然後再找到它們...

程式設計題 構造回文

給定乙個字串s,你可以從中刪除一些字元,使得剩下的串是乙個回文串。如何刪除才能使得回文串最長呢?輸出需要刪除的字元個數。輸入描述 輸入資料有多組,每組包含乙個字串s,且保證 1 s.length 1000.輸出描述 對於每組資料,輸出乙個整數,代表最少需要刪除的字元個數。輸入例子 abcda goo...