構造回文 最長回文子串

2021-09-16 14:07:00 字數 1208 閱讀 2599

題目

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

輸出需要刪除的字元個數。1<=s.length()<=1000。輸入

abcda

google 輸出

2 2思路

(我本沒有思路……)

回文串的特點是正著讀和反著讀一樣,假設原來字串是s,求它的反串,然後再找到它們的最長公共子串行,它的長度就是s能產生的最長回文串的長度啦。動態規劃呀!

**

1.0版本

報錯:您的程式發生段錯誤,可能是陣列越界,堆疊溢位(比如,遞迴呼叫層數太多)等情況引起

我???lcs明明很順暢啊

2.0版本

找大佬看了**,發現是string初始化的問題。

也就是,string是c++裡的類,初始化時如果不指定長度,就會有乙個預設長度。然後我的字串是題目給的,1~1000,假設直接給個1000長度的,就很有可能超過它的預設長度,然後你遍歷的時候就會造成溢位。因此,對於這種情況,要

int maxn=1005;

int func(string s)

這樣之後才能進行遍歷操作

for(int i=0;ivector變數也是同理,都是c++裡的類。所以假設你要進行遍歷操作(例如初始化賦值),就要記得

vector v;

v.resize(maxn);

for(int i=0;i不過,假如你只是要進行一些push_back操作,就不用設定長度,重新分配空間啦。

3.0版本

大佬指導: 以後別用string了,改用char[maxn]陣列就好了,沒有初始化問題。

char s[maxn];

int n;

n=strlen(s);//strlen可以直接用在char陣列上的,我以前想的居然是char[i]!='\0'

for(int i=0;i**(c++)

#include #include#includeusing namespace std;

int c[1001][1001];

int hw(string s)

return 0;

}

最長回文子串 最長回文子串行

1.最長回文子串行 可以不連續 include include include include using namespace std 遞迴方法,求解最長回文子串行 intlps char str,int i,int j intmain include include include using n...

近似回文串 最長回文子串

輸入一行文字,輸出最長近似回文詞連續子串。所謂近似回文詞是指滿足以下條件的字串 1.s以字母開頭,字母結尾 2.a s 和b s 最多有2k個位置不同,其中a s 是s刪除所有非字母字元並且把所有字母轉化成小寫之後得到的串,b s 是a s 的逆序串。比如當k 1時,race cat是乙個近似回文詞...

最長回文子串與最長回文子串行

題目1 求最長回文子串 題目2 求回文子串數量 忽略兩個題目對於返回結果的不同要求 前者返回最長的結果,後者返回最長的結果對應的長度即可 dp陣列的定義的區別 最長回文子串 dp i j 表示的是string s中從i到j的子串 用python語法就是s i j 1 是否為回文子串。最長回文子串行 ...