zoukankan      html  css  js  c++  java
  • Palindrome Partitioning II

    题目:Given a string s, partition s such that every substring of the partition is a palindrome.

    Return the minimum cuts needed for a palindrome partitioning of s.For example, given s = "aab",

    Return 1 since the palindrome partitioning ["aa","b"] could be produced using 1 cut.

    思路:

    本题使用动态规划,一开始使用dp[i][j]二维数组代表从i到j能否形成回文串,这里面有一些小技巧比如:如果dp[i][j]是真的话,那么dp[i+1][j-1]也是真之类的。

    当然,首先,count[i]=min{  count[i],count[j+1]+1    }&&dp[i][j]==1  这个核心的条件。

    在最后的代码里面,最终判断的时候就一个判断句。

    代码:

    class Solution {
    public:
    //https://leetcode.com/problems/palindrome-partitioning-ii/
        int minCut(string s) {
            //核心公式
            //  count[i]=从i到尾的最小剪切数
            //  count[i]=min{  count[j+1]+1  }  +  dp[i][j]==1   j=i....s.length()        
            int len = s.size();  
            int count[len+1];
            bool dp[len][len];     
    
            for(int i = 0; i <= len; i++){
                count[i] = len-i;     
            }   
    
            for(int i = 0; i < len; i++){
                for(int j = 0; j < len; j++){
                    dp[i][j] = false;     
                }   
            }  
    
            for(int i=len-1;i>=0;i--){
    
                for(int j=i;j<=len-1;j++){
                    if((j-i<2||dp[i+1][j-1]==1)&& s[i]==s[j]){
                        dp[i][j]=true;
                        count[i]=min(   count[i],count[j+1]+1    );
                    }
                }
            }
    
            return count[0]-1;
        }
    };


  • 相关阅读:
    JS和C#对Json的操作
    JS图形化插件利器组件系列 —— Gojs组件
    Android APK反编译 apktool使用教程
    UML系列图
    多线程学习 ---- 系列教程
    大型网站架构之系列
    经典算法题锦集
    基本算法系列15天速成
    居转户--相关信息
    使用C#创建Windows服务
  • 原文地址:https://www.cnblogs.com/jsrgfjz/p/8519879.html
Copyright © 2011-2022 走看看