1. 程式人生 > 其它 >LeetCode 131. 分割回文串

LeetCode 131. 分割回文串

難度:中等。
標籤:深度優先搜尋,回溯演算法,動態規劃。

我的思路:
使用回溯來寫,具體思路見程式碼。
也可以用動態規劃來實現,使用 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; } };

結果:
在這裡插入圖片描述