zoukankan      html  css  js  c++  java
  • leetcode 1278 分割回文串

     time O(n^2*k)  space O(n^2)

    class Solution {
    public:
        int palindromePartition(string s, int K) {
            //分成两步:第一步递归求将下标【i,j】变为回文子串的最小代价cost(i,j);   
            //cost(i,j)=cost(i+1,j-1)+(s[i]!=s[j]?1:0);
            //第二步:利用cost(i,j)递归求解将0~i分为k个回文子串的最小代价dp(i,k);   
            //dp(i,k)=min{dp(j,k-1)+cost(j+1,i)}  j range from [0,i-1],k range from [2,K];
            //dp(i,1)=cost(0,i);
            int len=s.length();
            vector<vector<int>> cost(len,vector<int>(len,0));
            for(int l=1;l<len;l++){
                for(int i=0;i<len&&(i+l<len);i++){
                    int j=i+l;
                    cost[i][j]=cost[i+1][j-1]+(s[i]!=s[j]?1:0);
                }
            }
             
            vector<vector<int>> dp(len,vector<int>(K+1,INT_MAX-1024));
            for(int i=0;i<len;i++){
                dp[i][1]=cost[0][i];
                for(int k=2;k<=K;k++){
                    for(int j=0;j<i;j++){
                        dp[i][k]=min(dp[i][k],dp[j][k-1]+cost[j+1][i]);
                    }
                }
            }
            return dp[len-1][K];
        }
    };

    参考https://mp.weixin.qq.com/s/Da_6dqSYTa9jOzsh7sD2YQ

    首先,完成第一个DP,计算回文子串所需要的cost(i,j),即将【i,j】内的字符串变为回文字符最少需要改变几个字母;

    #include <bits/stdc++.h>
    using namespace std;
    //直接输出cost矩阵
    int main()
    {
        cout << "Hello World"<<endl;
        string s="abcde";
        int len=s.length();
        vector<vector<int>> cost(len,vector<int>(len,0));
    
        for(int l=1;l<len;l++){
            for(int i=0;i<len&&(i+l<len);i++){
                int j=i+l;
                cost[i][j]=cost[i+1][j-1]+(s[i]!=s[j]?1:0);
            }
        }
        for(int i=0;i<len;i++){
            for(int j=0;j<len;j++){
                cout<<cost[i][j]<<" ";
            }
            cout<<endl;
        }
        cout<<endl;
        return 0;
    }

    然后,完成第二个DP,计算dp[i][k] (k from 1 to K, i from 0 to len-1) ;

    更新说明:

  • 相关阅读:
    GitHub常用 库
    App性能优化
    iOS App性能优化
    UIButton图片与文字位置调整
    Mac常用目录
    js数字转金额,ajax调用接口,后台返回html(完整页面),打开新窗口并写入html
    js坑 把数字型的字符串默认为数字 把前面的0给去掉了("001")
    url跳转路径参数获取
    常用正则表达式,手机号,邮箱,网址
    Js获取操作系统版本 && 获得浏览器版本
  • 原文地址:https://www.cnblogs.com/joelwang/p/11990609.html
Copyright © 2011-2022 走看看