131. Palindrome Partitioning

1.問題

  • 給予一個字串, 分割為各種可能是回文的substring

2.想法

  • 提問

  • function header, parameter

  • test input

  • 觀察

    • 其實可以看成排列組合, 上一回起始點為0, 終點為n, 下一回合的起始點n + 1, 終點為m, 當m + 1為string.length時return

    • substr的用法

  • 說明想法

  • 測試計算複雜度

3.程式碼

class Solution {
public:
    vector<vector<string>> partition(string s) {
        vector<vector<string>> res; 
        vector<string> record;
        getSubStr(res, record, s, 0);
        return res;
    }
private:
    void getSubStr(vector<vector<string>>& res, vector<string>& record, string s, int start) {
        if (start == s.size()) {
            res.push_back(record);
            return; 
        }
        
        for (int i = start; i < s.size(); i++) {
            //substr的長度參數要算入自己
            int len = i - start + 1;
            string tmp = s.substr(start, len); 
            if (isPalindrome(tmp)) {
                record.push_back(tmp);
                getSubStr(res, record, s, i + 1); 
                record.pop_back();
            }
        }
    }
    
    bool isPalindrome(string s) {
        int size = s.length();
        for (int i = 0; i < size / 2; i++) {
            if (s[i] != s[size - 1 - i]) {
                return false;
            }
        }
        return true;
    }
};

Last updated