所謂回文字串,就是乙個字串,從左到右讀和從右到左讀是完全一樣的,比如"aba"。當然,我們給你的問題不會再簡單到判斷乙個字串是不是回文字串。現在要求你,給你乙個字串,可在任意位置新增字元,最少再新增幾個字元,可以使這個字串成為回文字串。
輸入格式
第一行給出整數 nn(0接下來的 nn 行,每行乙個字串,每個字串長度不超過 10001000。
輸出格式
每行輸出所需新增的最少字元數。
輸出時每行末尾的多餘空格,不影響答案正確性
樣例輸入複製
1ab3bd
樣例輸出複製
2本題可以這樣想,如果這個字串裡面已經存在了回文串,那麼剩下左邊和右邊的那些就是不對稱的,所以在左邊補上右邊的字元,右邊補上左邊的字元,這樣就會完整了,所以要補齊的字元數目就是總長度減去串內部的回文串長度,而內部的回文串長度則可以由本串和逆串來求出最長回文子串行,這就是基本的dp問題了,好了,直接上**了。
//@author:hairu,wu
//@from:ahut
#include
#include
using
namespace std;
string fun
(string str)
return ans;
}int
main()
for(
int i=
1;i<=len;i++
)else}}
cout<[len]
<}return0;
}
計蒜客 12 回文數
乙個正整數,如果交換高低位以後和原數相等,那麼稱這個數為回文數。比如 121 12112 1,2332 2332 2332 都是回文數,13 1313 4567 4567 4567 不是回文數。任意乙個正整數,如果其不是回文數,將該數交換高低位以後和原數相加得到乙個新的數,如果新數不是回文數,重複這...
計蒜客 逃生dp
蒜頭君在玩一款逃生的遊戲。在乙個 n m 的矩形地圖上,蒜頭位於其中乙個點。地圖上每個格仔有加血的藥劑,和掉血的火焰,藥劑的藥效不同,火焰的大小也不同,每個格仔上有乙個數字,如果格仔上的數字是正數說明是乙個藥劑代表增加的生命值,如果是負數說明是火焰代表失去的生命值。蒜頭初始化有 v 點血量,他的血量...
計蒜客 劃分整數(dp)
劃分整數 蒜頭君特別喜歡數學。今天,蒜頭君突發奇想 如果想要把乙個正整數 nn n 分解成不多於 kk k 個正整數相加的形式,那麼一共有多少種分解的方式呢?蒜頭君覺得這個問題實在是太難了,於是他想讓你幫幫忙。共一行,包含兩個整數 n 1 n 300 n 1 leq n leq 300 n 1 n ...