/* * @Author: LetMeFly * @Date: 2025-03-01 15:34:55 * @LastEditors: LetMeFly.xyz * @LastEditTime: 2025-03-01 16:01:13 * @Description: 头脑不清醒这题写了半小时好难受 */ /* s = aba n = 3 status = 4(共4种状态) */
classSolution { private: int n; string s;
boolisok(int l, int r){ // [l, r) for (r--; l < r; l++, r--) { if (s[l] != s[r]) { returnfalse; } } returntrue; }
boolisOk_all(int code){ int l = 0; for (int r = 0; r < n - 1; r++) { if (code >> r & 1) { if (!isok(l, r + 1)) { returnfalse; } l = r + 1; } } returnisok(l, n); }
voidstore(vector<vector<string>>& ans, int code){ ans.push_back({}); int l = 0; for (int r = 0; r < n - 1; r++) { if (code >> r & 1) { ans.back().push_back(s.substr(l, r - l + 1)); l = r + 1; } } ans.back().push_back(s.substr(l, n - l + 1)); } public: vector<vector<string>> partition(string s) { n = s.size(); this->s = move(s); int status = 1 << (n - 1); vector<vector<string>> ans; for (int c = 0; c < status; c++) { if (isOk_all(c)) { store(ans, c); } } return ans; } };
classSolution: defok(self, s: str) -> bool: for i inrange(len(s) // 2): if s[i] != s[len(s) - i - 1]: returnFalse returnTrue
defdfs(self, l: int) -> None: if l == len(self.s): self.ans.append([i for i inself.now]) return for r inrange(l, len(self.s)): temp = self.s[l:r + 1] ifself.ok(temp): self.now.append(temp) self.dfs(r + 1) self.now.pop()