NYOJ回文字串

2021-08-20 18:09:13 字數 1083 閱讀 6843

時間限制:3000 ms | 記憶體限制:65535 kb

難度:4

描述

所謂回文字串,就是乙個字串,從左到右讀和從右到左讀是完全一樣的,比如」aba」。當然,我們給你的問題不會再簡單到判斷乙個字串是不是回文字串。現在要求你,給你乙個字串,可在任意位置新增字元,最少再新增幾個字元,可以使這個字串成為回文字串。

輸入

第一行給出整數n(0 < n <100)

接下來的n行,每行乙個字串,每個字串長度不超過1000.

輸出

每行輸出所需新增的最少字元數

樣例輸入

1 ab3bd

樣例輸出

2**

ioi 2000

上傳者

hzyqazasdf

分析:

看到這題,很容易想到括號匹配(二)的方法:區間dp。下面就用區間dp來求解:

定義狀態dp[i][j]為區間[i,j]的需要新增的最少字元,則我們的決策有

如果s[i]==s[j],則dp[i][j]=dp[i+1][j-1]

否則,dp[i][j]=min(dp[i+1][j],dp[i][j-1]);//即在左邊新增或者在區間的右邊新增乙個字元

注意,這題不能按照一般的區間dp那樣分割字區間,因為兩個回文字元的字區間組合起來不一定是回文字元!

accpeted code:

#include

#include

using

namespace

std;

const

int maxn=1005;

int dp[maxn][maxn];

int main()

else}}

cout

<0][n-1]<}

}

回文字串 nyoj

時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 所謂回文字串,就是乙個字串,從左到右讀和從右到左讀是完全一樣的,比如 aba 當然,我們給你的問題不會再簡單到判斷乙個字串是不是回文字串。現在要求你,給你乙個字串,可在任意位置新增字元,最少再新增幾個字元,可以使這個字串成為回文...

NYOJ 回文字串

時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 所謂回文字串,就是乙個字串,從左到右讀和從右到左讀是完全一樣的,比如 aba 當然,我們給你的問題不會再簡單到判斷乙個字串是不是回文字串。現在要求你,給你乙個字串,可在任意位置新增字元,最少再新增幾個字元,可以使這個字串成為回文...

NYOJ 37 回文字串

思想 在紙上測試幾組資料,發現先逆轉原來的字串,再用原來的字串跟逆轉後的字串進行比較,求得的最長公共子串行就是回文串,也就是不需要新增的,再用總長度減去最長公共子串行就可以得到最少需要新增的字元數。就簡單了,以前寫過的稍稍改下就直接貼上來了。include includeint f 1001 100...