|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目描述:
- 给你一个字符串 s ,每一次操作你都可以在字符串的任意位置插入任意字符。
- 请你返回让 s 成为回文串的 最少操作次数 。
- 「回文串」是正读和反读都相同的字符串。
-  
- 示例 1:
- 输入:s = "zzazz"
- 输出:0
- 解释:字符串 "zzazz" 已经是回文串了,所以不需要做任何插入操作。
- 示例 2:
- 输入:s = "mbadm"
- 输出:2
- 解释:字符串可变为 "mbdadbm" 或者 "mdbabdm" 。
- 示例 3:
- 输入:s = "leetcode"
- 输出:5
- 解释:插入 5 个字符后字符串变为 "leetcodocteel" 。
- 示例 4:
- 输入:s = "g"
- 输出:0
- 示例 5:
- 输入:s = "no"
- 输出:1
-  
- 提示:
- 1 <= s.length <= 500
- s 中所有字符都是小写字母。
- 来源:力扣(LeetCode)
- 链接:https://leetcode-cn.com/problems/minimum-insertion-steps-to-make-a-string-palindrome
- 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
复制代码
- class Solution {
- public:
- int minInsertions(string s) {
- int len = s.size();
- vector<vector<int> > dp(len, vector<int>(len, 0));
- for(int i = 0; i < len; i++)dp[i][i] = 1;
- for(int i = len-1; i >= 0; i--){
- for(int j = i+1; j < len; j++){
- if(s[i] == s[j]){
- dp[i][j] = dp[i+1][j-1] + 2;
- }else{
- dp[i][j] = max(dp[i+1][j], dp[i][j-1]);
- }
- }
- }
- return len - dp[0][len-1];
- }
- };
复制代码
注意事项:
1.返回的是字符串串长度减去字符串最长子序列个数 |
|