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

leetcode—Palindrome 解題報告

編輯:C++入門知識

1.題目描述

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

Return all possible palindrome partitioning of s.

For example, given s = "aab",
Return

  [
    ["aa","b"],
    ["a","a","b"]
  ]
也就是給定一個字符串,找出所有可能的劃分,每一個劃分的每一個字串都是回文串。設這個劃分函數為partition_index(string s,int begin,int end)

2.解題思路

蠻力法當然是可以解決這個問題,對於一個長度為n的字符串,有2n-1種劃分方法,只需要判斷每種劃分是否滿足條件即可,雖然不知道暴力法能不能在系統裡面ac掉,但是這樣顯然不是一個正常的程序員該干的事。不過蠻力法會給我們一些啟示。我們從為什麼蠻力法會有2n-1種劃分方法開始分析。

當然,這也很容易分析,對於長度為n的字符串s0s1…sk…sn-1,在sk和sk-1之間我們可以選擇截斷與不截斷,但是,我們可以基於這個思路理出一個遞歸的思路,那就是,對於字符串sbeginsbegin+1…sbegin+k…sn-1,所有可能滿足條件的劃分分為兩類:

(1)在sbegin和sbegin+1之間有隔斷,這種情況,只需sbegin和partition_index(s,begin+1,n-1)連接起來即可

(2)在sbegin和sbegin+1之間無隔斷,這種情況,需找到至少包含sbegin和sbegin+1的一個回文字符串,如果能夠找到,比如,sbegin…sbegin+k是一個回文字符串,那麼,將這個回文字符串和partition_index(s,k+1,n-1)連接起來,注意,可能找到不止一個包含s0和s1的回文字符串,那麼有多少個,就多出多少類劃分可能;如果找不到,那麼返回空vector.

3.代碼



              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              

          
        
      
    

  

 

另外,代碼可以簡化,比如,連接結果的代碼可以封裝成一個函數.

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