codevs1520 回文字串

2021-08-08 12:47:04 字數 1065 閱讀 1724

題解

題目描述 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個變...