LeetCode 131. 分割回文串
阿新 • • 發佈:2021-03-10
難度:中等。
標籤:深度優先搜尋,回溯演算法,動態規劃。
我的思路:
使用回溯來寫,具體思路見程式碼。
也可以用動態規劃來實現,使用
d
p
[
i
]
[
j
]
dp[i][j]
dp[i][j]來儲存從i到j的字串是否為迴文,較簡單沒有寫程式碼。
正確解法:
class Solution {
vector<vector<string>> result;
bool isPalindromic(string s, int left, int right){
if(right == left)return true;
int mid = left + (right - left + 1) / 2;
for(int i = left; i < mid ; i++){
if(s[i] != s[right - (i - left)])return false;
}
return true;
}
void backtrace(string s, vector<string> arr, int m){
int n = s.length();
if(m == n){
result. emplace_back(arr);
return;
}
for(int i = m; i < n; i++){
if(isPalindromic(s, m, i)){
arr.emplace_back(s.substr(m, i - m + 1));
backtrace(s, arr, i + 1);
arr.pop_back();
}
}
}
public:
vector< vector<string>> partition(string s) {
vector<string> arr;
backtrace(s, arr, 0);
return result;
}
};
結果: