51nod 1092 回文字串

2021-08-19 21:20:04 字數 873 閱讀 1266

回文串是指aba、abba、cccbccc、aaaa這種左右對稱的字串。每個字串都可以通過向中間新增一些字元,使之變為回文字串。

例如:abbc 新增2個字元可以變為 acbbca,也可以新增3個變為 abbcbba。方案1只需要新增2個字元,是所有方案中新增字元數量最少的。

input

輸入乙個字串str,str的長度 <= 1000。

output

輸出最少新增多少個字元可以使之變為回文字串。

input示例

abbc

output示例

作為蒟蒻的我看了這道題後並沒有什麼思路,再試水了幾發後成功wa了,後來在聚聚們的暗中提示下終於大徹大悟

說一下思路:把原串a翻轉過來作為b串,求出a,b的最長公共子串行,再用長度減去這個lcs就可以了

為什麼呢,因為任何乙個串,都可以變成回文串,最壞的情況就是整個複製下來是加在原串後,就是乙個回文串了

只不過不確定是不是最短的,這時候你求出了lcs,只要在原串上加上不是lcs的那一部分字母,就會構成最短回文串了

下面貼上**:

#include #include #include #include #include #include using namespace std;

string a,b,c;

int dp[1005][1005];

int main()

else if(dp[i-1][j]>dp[i][j-1])

else if(dp[i-1][j]<=dp[i][j-1])

}cout

}

51nod 1092 回文字串

1092 回文字串 基準時間限制 1 秒 空間限制 131072 kb 分值 10 難度 2級演算法題 收藏 關注 回文串是指aba abba cccbccc aaaa這種左右對稱的字串。每個字串都可以通過向中間新增一些字元,使之變為回文字串。例如 abbc 新增2個字元可以變為 acbbca,也可...

51nod 1092 回文字串

題解 本題要求的是求最小新增的數,那麼可以進行反向的思考,直接算最大的公共長度,然後用總長度 最的公共長度之後,就是答案了。include include include include include using namespace std const int maxn 1000 10 defin...

51nod 1092 回文字串

1092 回文字串 難度 2級演算法題 回文串是指aba abba cccbccc aaaa這種左右對稱的字串。每個字串都可以通過向中間新增一些字元,使之變為回文字串。例如 abbc 新增2個字元可以變為 acbbca,也可以新增3個變為 abbcbba。方案1只需要新增2個字元,是所有方案中新增字...