題目
給定乙個字串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 是否為回文子串。最長回文子串行 ...