【LeetCode】1131. 分割回文串 結題報告 (C++)
阿新 • • 發佈:2018-12-12
題目描述:
給定一個字串 s,將 s 分割成一些子串,使每個子串都是迴文串。
返回 s 所有可能的分割方案。
示例:
輸入: "aab" 輸出: [ ["aa","b"], ["a","a","b"] ]
解題方案:
本題是回溯法的題目,回溯法總是和深度優先遍歷有關,相關函式的命名為dfs()。遍歷的方式是遞迴,遞迴傳入的重要引數為當前陣列開始的位置。
本題還需要判斷當前字串是否為迴文串,定義函式isPali()。
class Solution { public: bool isPali(string s){ for(int i = 0; i < s.length() / 2; i ++) if(s[i] != s[s.length() - i - 1]) return false; return true; } void dfs(vector<vector<string>> &ans, vector<string> &tmp, int n, string s){ if(n == s.length()){ ans.push_back(tmp); return; } for(int i = n; i < s.length(); i ++){ if(isPali(s.substr(n, i - n + 1))){ tmp.push_back(s.substr(n, i - n + 1)); dfs(ans, tmp, i + 1, s); tmp.pop_back(); } } } vector<vector<string>> partition(string s) { vector<vector<string>> ans; vector<string> tmp; dfs(ans, tmp, 0, s); return ans; } };