1class Solution {2public:3vector<vector<int>> dp1;4bool isPalindrome(string &s, int i, int j) {5if (i >= j) return true;6if (dp1[i][j] != -1) return dp1[i][j];7if (s[i] == s[j]) return dp1[i][j] = isPalindrome(s, i + 1, j - 1);8return dp1[i][j] = false;9}10bool checkPartitioning(string s) {11int n = s.size();12dp1.resize(n, vector<int>(n, -1));13for (int i = 0; i < n; i++) {14for (int j = i + 1; j < n - 1; j++) {15if (isPalindrome(s, 0, i) && isPalindrome(s, i + 1, j) && isPalindrome(s, j + 1, n - 1))16return true;17}18}19return false;20}21};