其他分享
首页 > 其他分享> > LeetCode 1312. 让字符串成为回文串的最少插入次数(区间dp)

LeetCode 1312. 让字符串成为回文串的最少插入次数(区间dp)

作者:互联网

题意:

给你一个字符串 s ,每一次操作你都可以在字符串的任意位置插入任意字符。

请你返回让 s 成为回文串的 最少操作次数 。

「回文串」是正读和反读都相同的字符串。

数据范围:
1 <= s.length <= 500
s 中所有字符都是小写字母。

解法:

令d[i][j]表示[i,j]成为回文的最少插入次数,

当s[i]=s[j]时,d[i][j]可以由d[i+1][j-1]转移,代价为0,
同时,d[i][j]还可以由d[i+1][j]和d[i][j-1]转移,代价为1.

code:

class Solution {
public:
    int d[555][555];
    int minInsertions(string s) {
        int n=s.size();
        memset(d,0,sizeof d);
        for(int len=1;len<=n;len++){
            for(int i=0;i<n;i++){
                int j=i+len-1;
                if(j>=n)break;
                if(len==1)d[i][j]=0;
                else{
                    d[i][j]=1e9;
                    if(s[i]==s[j]){
                        d[i][j]=min(d[i][j],d[i+1][j-1]);
                    }
                    d[i][j]=min(d[i][j],d[i+1][j]+1);
                    d[i][j]=min(d[i][j],d[i][j-1]+1);
                }
            }
        }
        return d[0][n-1];
    }
};

标签:1312,min,int,len,插入,字符串,LeetCode,dp,回文
来源: https://blog.csdn.net/weixin_44178736/article/details/113823226