程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Palindrome Partitioning II -- LeetCode

Palindrome Partitioning II -- LeetCode

編輯:C++入門知識

原題鏈接: http://oj.leetcode.com/problems/palindrome-partitioning-ii/
這道題跟Palindrome Partitioning非常類似,區別就是不需要返回所有滿足條件的結果,而只是返回最小的切割數量就可以。做過Word Break的朋友可能馬上就會想到,其實兩個問題非常類似,當我們要返回所有結果(Palindrome Partitioning和Word Break II)的時候,使用動態規劃會耗費大量的空間來存儲中間結果,所以沒有明顯的優勢。而當題目要求是返回某個簡單量(比如Word Break是返回能否切割,而這道題是返回最小切割數)時,那麼動態規劃比起brute force就會有明顯的優勢。這道題先用Palindrome Partitioning中的方法建立字典,接下來動態規劃的方式和Word Break是完全一樣的,我們就不再細說了,不熟悉的朋友可以看看Word Break的分析哈。因為保存歷史信息只需要常量時間就能完成,進行兩層循環,時間復雜度是O(n^2)。空間上需要一個線性數組來保存信息,所以是O(n)。代碼如下:

public int minCut(String s) {
    if(s == null || s.length()==0)
        return 0;
    boolean[][] dict = getDict(s);
    int[] res = new int[s.length()+1];
    res[0] = 0;
    for(int i=0;i=0;i--)
    {
        for(int j=i;j這個問題和Word
 Break可以說是一個題目,這裡多了一步求解字典。如果求解所有結果時,他們沒有多項式時間的解法,復雜度取決於結果數量,而當求解某一種統計的特殊量時,用動態規劃就會很大的優勢,可以降低時間復雜度。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved