題解
題目描述 description
所謂回文字串,就是乙個字串,從左到右讀和從右到左讀是完全一樣的,比如:
aba kllkllk tyyt 都是。
當然,我們給你的問題不會再簡單到判斷乙個字串是不是回文字串。現在要求你,給你乙個字串,可在任意位置新增字元,最少再新增幾個字元,可以使這個字串成為回文字串。
輸入描述 input description
第一行給出乙個字串,長度為n,以換行符結束(0 < n < 1000)
輸出描述 output description
輸出所需新增的最少字元數
樣例輸入 sample input
ab3bd
樣例輸出 sample output
2 資料範圍及提示 data size & hint
0 < n < 1000
分析:
我覺得我們可以把這個串翻一下
變成兩個串,
問題就變成了至少要多少次新增使得兩個串一樣
f[i][j]表示第乙個串的第i位和第二個串的第j位匹配
如果s1[i]==s2[j]
f[i][j]=f[i-1][j-1]
如果s1[i]!=s2[j]
f[i][j]=min+1
注意初始化 f[i][0]=f[0][i]=i
最後的答案是
因為我們把乙個字串拆成了兩個
要讓ta們變成相同字串,就需要兩個字串都改變
這樣每個操作就會計算兩遍,所以最後輸出f[len][len]/2就好了
這裡寫**片
#include
#include
#include
using
namespace
std;
char s1[1002],s2[1002];
int l,f[1002][1002];
int main()
printf("%d",f[l][l]/2);
return
0;}
code vs 1520 回文字串 dp
時間限制 1 s 空間限制 64000 kb 題目等級 gold 題解 檢視執行結果 所謂回文字串,就是乙個字串,從左到右讀和從右到左讀是完全一樣的,比如 aba kllkllk tyyt 都是。當然,我們給你的問題不會再簡單到判斷乙個字串是不是回文字串。現在要求你,給你乙個字串,可在任意位置新增字...
codevs 1520 回文字串(dp)
1520 回文字串 時間限制 1 s 空間限制 64000 kb 題目等級 gold 題目描述 description 所謂回文字串,就是乙個字串,從左到右讀和從右到左讀是完全一樣的,比如 aba kllkllk tyyt 都是。當然,我們給你的問題不會再簡單到判斷乙個字串是不是回文字串。現在要求你...
1092 回文字串
1092 回文字串 基準時間限制 1 秒 空間限制 131072 kb 分值 10 難度 2級演算法題 回文串是指aba abba cccbccc aaaa這種左右對稱的字串。每個字串都可以通過向中間新增一些字元,使之變為回文字串。例如 abbc 新增2個字元可以變為 acbbca,也可以新增3個變...