內容會持續更新,有錯誤的地方歡迎指正,謝謝!
給定乙個字串s,你可以從中刪除一些字元,使得剩下的串是乙個回文串。如何刪除才能使得回文串最長呢?
輸出需要刪除的字元個數。
輸入描述:
輸入資料有多組,每組包含乙個字串s,且保證:1<=s.length<=1000
輸出描述:
對於每組資料,輸出乙個整數,代表最少需要刪除的字元個數。
示例:
輸入abcdba 輸出1
輸入google 輸出2
求乙個序列的回文,就是在求「這個序列」和「這個序列的倒序列」的最長公共子串行。其中,回文不一定是連續的,最長公共子串行也不一定是連續的。
總結:「乙個序列」和「這個序列的倒序列」的最長公共子串行就是這個序列的回文。
方法:(自底向上的)動態規劃—迭代
所用資料結構:string
所用標頭檔案:
1.引入#include
是為了使用max()和reverse()
max()的原型:template const t& max(const t& a, const t& b);
reverse()用於反轉元素次序,會將區間[beg,end)內的元素全部逆序,注意別用在關聯式容器
2.引入#include
當然是為了使用string
#include
#include
#include
using
namespace
std;
#define max 1001
int maxarray[max][max];
int maxlength(string s1,string s2)
for(int j=0;j<=slength;++j)
for(int i=1;i<=slength;++i)
}return maxarray[slength][slength];
}int main()
string s2=s;//需要先拷貝,再利用reverse反轉序列
reverse(s2.begin(),s2.end());//reverse()返回型別為void
int reslength=maxlength(s,s2);
cout
0;}
把最醜的放最後—>博主的草稿圖:
隨便舉的乙個例子咯,你們也去隨便舉乙個,然後像我這樣畫一畫就懂了~
程式設計題 構造回文
給定乙個字串s,你可以從中刪除一些字元,使得剩下的串是乙個回文串。如何刪除才能使得回文串最長呢?輸出需要刪除的字元個數。輸入描述 輸入資料有多組,每組包含乙個字串s,且保證 1 s.length 1000.輸出描述 對於每組資料,輸出乙個整數,代表最少需要刪除的字元個數。輸入例子 abcda goo...
程式設計題 構造回文
構造回文 時間限制 1秒 空間限制 32768k 給定乙個字串s,你可以從中刪除一些字元,使得剩下的串是乙個回文串。如何刪除才能使得回文串最長呢?輸出需要刪除的字元個數。輸入描述 輸入資料有多組,每組包含乙個字串s,且保證 1 s.length 1000.輸出描述 對於每組資料,輸出乙個整數,代表最...
程式設計題 構造回文
時間限制 1秒 空間限制 32768k 給定乙個字串s,你可以從中刪除一些字元,使得剩下的串是乙個回文串。如何刪除才能使得回文串最長呢?輸出需要刪除的字元個數。輸入描述 輸入資料有多組,每組包含乙個字串s,且保證 1 s.length 1000.輸出描述 對於每組資料,輸出乙個整數,代表最少需要刪除...