題目描述
回文詞是一種對稱的字串,也就是說:乙個回文詞,從左向右讀和從右向左讀的結果都是一樣的.任意給定乙個字串,通過插入若干個字元,都可以變成乙個回文詞.你的任務是寫乙個程式,求出給定字串變成回文詞所需插入的最小字元數.
比如,字串"ab3db",在插入兩個字元後可以變成乙個回文詞(「dab3bad」,「adb3bda」),然而,插入兩個以下的字元無法使它變成乙個回文詞.
輸入
輸入檔案的第一行包含乙個數n,表示給定字串的長度(3<=n<=5000)
檔案的第二行是乙個長度為n的字串。字串僅由大寫字母,小寫字母,和數字構成。大寫字母和小寫字母被認為是不同的。
輸出
輸出只包括一行,包含乙個整數,表示需要插入的字元數。
輸入樣例
5ab3bd
輸出樣例
2解題思路
先求出長度為n的字串的逆轉值。如字串 "1a2c " 的逆轉值為 "c2a1 "。 再求出他們的最長子序列長度。用n減去他們的最長子序列長度就是答案
ac完整程式
#include #include using namespace std;
int opt[5001][5001];
char s1[5001]=,s2[5001]=;
int main()//求長度為n的字串的逆轉值
for (i=1;i<=n;i++)
else
else opt[i][j]=opt[i-1][j];}}
}再求出他們的最長子序列長度
printf("%d\n",n-opt[n][n]);用n減去他們的最長子序列長度
return 0;
}
CSU 1328 近似回文詞 模擬
submit page summary time limit 1 sec memory limit 128 mb submitted 541 solved 191 輸入一行文字,輸出最長近似回文詞連續子串。所謂近似回文詞是指滿足以下條件的字串 1.s以字母開頭,字母結尾 2.a s 和b s 最多有...
回文詞 題解
題目描述 回文詞是一種對稱的字串 也就是說,乙個回文詞,從左到右讀和從右到左讀得到的結果是一樣的。任意給定乙個字串,通過插入若干字元,都可以變成乙個回文詞。你的任務是寫乙個程式,求出將給定字串變成回文詞所需插入的最少字元數。比如字串 ab3bd 在插入兩個字元後可以變成乙個回文詞 dab3bad 或...
回文詞 C語言
題目描述 輸入乙個字串,判斷它是否為回文以及映象串。輸入字串保證不含數字0.所謂回文串,就是反轉之後原串相同,如abba和madam。所謂映象串,就是左右映象之後和原串相同,如2s和3aiae。注意,並不是每個字元在映象之後都能得到乙個合法字元,本題中,每個字元的映象如下所示,空白項表示該字元映象後...