题解 | #变回文串的最少插入次数#

变回文串的最少插入次数

http://www.nowcoder.com/practice/bae2652b4db04a438368238498e4c13e

动态规划 :初始化dp[i][i]=0, 从右下角开始比较i=n-2开始,第i个字符和其后的所有字符对比填充,若字符不相等,则dp[i][j]=min(dp[i][j-1],d[i+1][j])+1;若相等则dp[i][j]=d[i+1][j-1]。
    n o w c o d e r
0 1 2 3 2 3 4 5 <-end
o     0 1 1 2 3 4
w       0 1 2 3 4 5
c           0 1 2 3 4
o              0 1 2 3
d                 0 1 2
e                    0 1<-start
r                        0
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param str string字符串 
     * @return int整型
     */
    int minInsert(string str) {
        // write code here
       int n=str.size();
       int a[n][n];
        for(int i=0;i<n;i++){
            a[i][i]=0;
        }
        for(int i=n-2;i>=0;i--){
            for(int j=i+1;j<n;j++){
                if(str[i]==str[j]){
                    a[i][j]=a[i+1][j-1];
                }
                else a[i][j]=min(a[i+1][j],a[i][j-1])+1;
            }
        }
       return a[0][n-1];
    }
};


全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务