1. 程式人生 > >lintcode---分割回文串

lintcode---分割回文串

題目描述:
給定一個字串s,將s分割成一些子串,使每個子串都是迴文串。
返回s所有可能的迴文串分割方案。

樣例:
給出 s = “aab”,返回

[
  ["aa", "b"],
  ["a", "a", "b"]
]

思路講解:我的第一想法就是深搜,利用遞迴,每次我們都可以迴圈判斷還沒有判斷的字串是否可以構成迴文串的長度,這裡需要注意的一點就是,我們這裡講每一次我們都是將一種情況儲存在一個字串中,並以‘,’來分割,這樣是為了避免我們用陣列時,需要刪除的麻煩。

程式碼詳解:

class Solution {
public:
    /*
     * @param s: A string
     * @return: A list of lists of string
     */
vector<vector<string>> partition(string &s) { // write your code here vector<string>strres; string flag=""; dfs(strres,0,s,flag); printstr(strres); cout<<strres.size()<<endl; vector<vector<string>>
res(strres.size()); cout<<strres.size()<<endl; for(int i=0;i<strres.size();i++){ string tmp=strres[i].substr(1,strres[i].length()-1); cout<<tmp<<endl; string ss=""; for(int j=0;j<tmp.length();j++){//將每一種的情況分割出來
if(tmp[j]!=','){ ss=ss+tmp[j]; }else{ res[i].push_back(ss); ss=""; } if(j==tmp.length()-1){ res[i].push_back(ss); } } } return res; } void dfs(vector<string>&res,int index,string s,string &flag){//深搜 if(index==s.length()){ res.push_back(flag); }else if(index<s.length()){ int len=s.length(); for(int i=1;i<=len-index;i++){ string temp=s.substr(index,i); if(judge_is_pal(temp)){ string tt=flag+","+temp; dfs(res,index+i,s,tt); } } } } bool judge_is_pal(string ss){//判斷一個字串是否是迴文字串 int len=ss.length(); for(int i=0;i<=len/2;i++){ if(ss[i]!=ss[len-i-1]){ return false; } } return true; } void printstr(vector<string>res){ for(int i=0;i<res.size();i++){ cout<<res[i]<<" "; } cout<<endl; } };

相關推薦

lintcode-分割-136

給定一個字串s,將s分割成一些子串,使每個子串都是迴文串。 返回s所有可能的迴文串分割方案。 樣例 給出 s = "aab",返回   [     ["aa","b"],     ["a","a"

LintCode- 分割

分割回文串 給定一個字串s,將s分割成一些子串,使每個子串都是迴文串。 返回s所有可能的迴文串分割方案。 樣例 給出 s = “aab”,返回 [ [“aa”, “b”], [“

lintcode---分割

題目描述: 給定一個字串s,將s分割成一些子串,使每個子串都是迴文串。 返回s所有可能的迴文串分割方案。 樣例: 給出 s = “aab”,返回 [ ["aa", "b"], ["a", "a", "b"] ] 思路講解:我的第一想法就是

【兩次過】Lintcode 136. 分割

給定一個字串s,將s分割成一些子串,使每個子串都是迴文串。 返回s所有可能的迴文串分割方案。 樣例 給出 s = "aab",返回 [ ["aa", "b"], ["a", "a", "

lintcode(136)分割

描述: 給定一個字串s,將s分割成一些子串,使每個子串都是迴文串。 返回s所有可能的迴文串分割方案。 樣例: 給出 s = "aab",返回 [ ["aa", "b"], ["a", "a", "b"] ] 思路: 應用遞迴來實現,每次從起始位置一次擷取1

lintcode練習-108. 分割 II

108. 分割回文串 II 給定一個字串s,將s分割成一些子串,使每個子串都是迴文。 返回s符合要求的的最少分割次數。 樣例 比如,給出字串s = "aab", 返回 1, 因為進行一次分割可

分割 · Palindrome Partitioning

nbsp space 特殊情況 clas 結束 ali rom 位置 函數 [抄題]: 給定一個字符串s,將s分割成一些子串,使每個子串都是回文串。 返回s所有可能的回文串分割方案。 給出 s = "aab",返回 [ ["aa", "b"], ["a", "a",

分割 II · Palindrome Partitioning II

class nbsp 英文 長度 總結 正常 bsp 風格 思路 [抄題]: 給定一個字符串s,將s分割成一些子串,使每個子串都是回文。 返回s符合要求的的最少分割次數。 [思維問題]: [一句話思路]: [輸入量]:空: 正常情況:特大:特小:程序裏處理到的特殊情況:異常

131 Palindrome Partitioning 分割

一個 oid ble etc post ++ cto 字符 可能 給定一個字符串 s,將 s 分割成一些子串,使每個子串都是回文串。返回 s 所有可能的分割方案。例如,給出 s = "aab",返回[ ["aa","b"], ["a","a","b"]]詳見:https

132 Palindrome Partitioning II 分割 II

回文 回文串 tco ++ ali 例如 post 字符 code 給定一個字符串 s,將 s 分割成一些子串,使每個子串都是回文串。返回 s 符合要求的的最少分割次數。例如,給出 s = "aab",返回 1 因為進行一次分割可以將字符串 s 分割成 ["aa","b"]

LeetCode 131. 分割(Palindrome Partitioning)

題目描述   給定一個字串 s,將 s 分割成一些子串,使每個子串都是迴文串。 返回 s 所有可能的分割方案。 示例: 輸入: "aab" 輸出: [ ["aa","b"], ["a","a","b"] ]  

LeetCode 132. 分割 II(Palindrome Partitioning II)

題目描述   給定一個字串 s,將 s 分割成一些子串,使每個子串都是迴文串。 返回符合要求的最少分割次數。 示例: 輸入: "aab" 輸出: 1 解釋: 進行一次分割就可將 s 分割成 ["aa","b"] 這樣兩個迴文子串。 &nb

LeetCode132.分割2

leetcode132.分割回文串2(動態規劃) 狀態:dp[i]表示字串s[0...i]最少的分割次數。 狀態轉移:dp[i] = min(dp[i], dp[j-1] + 1, 0=<j<=i&&s[j...i]是迴文串)。 邊界:dp[0] = 0。

LeetCode131.分割

 leetcode 131.分割回文串(dfs + 回溯) class Solution { public: //131.分割回文串 bool isPali(string s) { for (int i = 0; i < s.length() / 2; i++)

[Swift]LeetCode131. 分割 | Palindrome Partitioning

Given a string s, partition s such that every substring of the partition is a palindrome. Return all possible palindrome partitioning of&nb

【LeetCode】1131. 分割 結題報告 (C++)

題目描述: 給定一個字串 s,將 s 分割成一些子串,使每個子串都是迴文串。 返回 s 所有可能的分割方案。 示例: 輸入: "aab" 輸出: [   ["aa","b"],   ["a","a","b"] ] 解題方案: 本題是回溯法的題目,回溯法總是

【LeetCode】132. 分割 II 結題報告 (C++)

題目描述: 給定一個字串 s,將 s 分割成一些子串,使每個子串都是迴文串。 返回符合要求的最少分割次數。 示例: 輸入: "aab" 輸出: 1 解釋: 進行一次分割就可將 s 分割成 ["aa","b"] 這樣兩個迴文子串。 解題方案: 動態規劃的題目

【LeetCode】#132分割II(Palindrome Partitioning II)

【LeetCode】#132分割回文串II(Palindrome Partitioning II) 題目描述 給定一個字串 s,將 s 分割成一些子串,使每個子串都是迴文串。 返回符合要求的最少分割次數。 示例 輸入: “aab” 輸出: 1 解釋: 進行一次分割就可將 s

【LeetCode】#131分割(Palindrome Partitioning)

【LeetCode】#131分割回文串(Palindrome Partitioning) 題目描述 給定一個字串 s,將 s 分割成一些子串,使每個子串都是迴文串。 返回 s 所有可能的分割方案。 示例 輸入: “aab” 輸出: [ [“aa”,“b”], [“a”,“a”

LeetCode-132.分割 II(相關話題:動態規劃)

給定一個字串 s,將 s 分割成一些子串,使每個子串都是迴文串。 返回符合要求的最少分割次數。 示例: 輸入: "aab" 輸出: 1 解釋: 進行一次分割就可將 s 分割成 ["aa","b"] 這樣兩個迴文子串。 思路: 從後往前處理: boolean[][] f,