zoukankan      html  css  js  c++  java
  • [leetcode]Palindrome Partitioning II

    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.

     算法思路:

    思路1:dfs,求出所有的可能截断情况,再计算其中最小的。不用试,肯定超时。例如"aaaa....aaaaaaaa"

    思路2:dp。发现了回文串的dp方法还是比较好认知的。

    dp[i][j]代表字符串s.substring( i , j )是否是回文的。

    初始化状态dp[i][i] = true( 0 <= i < s.length )

    dp[i][j] = true有两种情况:

    1)s.charAt(i) == s.charAt(j) ,且j = i + 1

    2)s.charAt(i) == s.charAt(j) ,且dp[i + 1][ j - 1] = true(因此要数组要从下往上,从左往右的迭代)

    cuts[i]表示s.substring(i)的最小切分数,初始化是length - i - 1;

    当dp[i][j] == true时,则cuts[i] = min(cuts[i],cuts[j + 1])( j = s.length - 1)或者cuts[i] = min(cuts[i],cuts[j + 1] + 1)

    这个应该不难理解

    代码如下:

     1 public class Solution {
     2     public int minCut(String s) {
     3         if(s == null || s.length() < 2) return 0;
     4         int length = s.length();
     5         boolean[][] isPal = new boolean[length][length];
     6         int[] cuts = new int[length + 1];
     7         for(int i = length - 1; i >= 0; i--){
     8             cuts[i] = length - i - 1;
     9             for(int j = i ; j < length; j++){
    10                 if(s.charAt(i) == s.charAt(j) && (j - i < 2 || isPal[i + 1][j - 1])){
    11                     isPal[i][j] = true;
    12                     if(j == length - 1){
    13                         cuts[i] = Math.min(cuts[i], cuts[j + 1]);
    14                     }else{
    15                         cuts[i] = Math.min(cuts[i], cuts[j + 1] + 1);
    16                     }
    17                 }
    18             }
    19         }
    20         return cuts[0] ;    
    21     }
    22 }
  • 相关阅读:
    idea websitehttp://www.youyur.com/
    chromium project相关页面
    WebKit Remote Debugging
    天兰尾货
    GitCookbook from google chromium
    ocr识别
    Google发布Chrome官方扩展DOM Snitch 可发现网页代码漏洞
    WebKit2 High Level Document ¶
    Phantom JS: an alternative to Selenium
    Python Extension
  • 原文地址:https://www.cnblogs.com/huntfor/p/3897922.html
Copyright © 2011-2022 走看看