題目:
Palindrome Partitioning I
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"]
]
分析:
題意給我們一個字元串,求出所有這個字元串的子串,并且子串都為回文字元串的情況,輸出它的集合結果
解題思路:(跟DFS深度周遊有點像!)
字元串Str = "aab";
分析了題目的資料之後,我們知道它的結果,可能是 a, a, b 或者 aa, b 這樣的情況!
也就是說,我們需要去考慮 i = 1, 2 .... n 的情況,比如
Str = "aaa"
結果集
[[a, a, a], [a, aa], [aa, a], [aaa]]
根據這樣的情況,我們用類似于DFS的算法
str1 = str.substr(0, i); 取出前面下标從 0 開始到 i 結束的子串,判斷str1是否滿足回文字元串的要求,
1. 滿足:這樣子,有可能成為一種分割的情況,是以我們new出一個list集合,把str1放入到list中,然後我們求出str剩餘的子串 str2 = str.substr(i); 取出前面下标從 i 開始到整個字元串結尾的子串, 然後将str2 作為新的字元串,同時把list集合也傳入到函數中,遞歸調用。遞歸的結束條件就是到傳入的這個字元串的長度為0(這樣就意味着已經到了字元串的末尾了),此時證明這種情況下得到的list集合是滿足條件的,我們把這個list集合 加入到 結果集合result中。
2. 不滿足的話,繼續 i++, 直到 i == str.length();
3. 全部結束之後,傳回 最終的結果集合 result