字符切割回文串(动态规划)

423 阅读1分钟

给出一个字符串s,分割s使得分割出的每一个子串都是回文串 计算将字符串s分割成回文分割结果的最小切割数

题目链接

class Solution {
private:
    string s;
    int f[1000][1000];
public:
    int minCut(string s) {
        this -> s = s;
        int len = s.length();
        for(int t=0;t<=len;t++)
            for(int i=0,j=t;j<len;i++,j++)
                f[i][j] = comCut(i,j);
        return f[0][s.length()-1];
    }
    int comCut(int i,int j){
        if(isPalindrome(i,j))return 0;
        int min = s.length();
        for(int p = i;p<j;p++){
            int a = f[i][p];
            int b = f[p+1][j];
            a = a + b +1;
            min = min < a ? min : a;
        }
        return min;
    }
    bool isPalindrome(int i,int j){
        while(i<j){
            if(s[i]!=s[j])return false;
            i++;j--;
        }
        return true;
    }
};