1class Solution {2int dp[];34public boolean pali(int i, int j, String s) {56// int j=s.length()-1,i=0;7while (i <= j) {8if (s.charAt(i) != s.charAt(j)) return false;9i++;10j--;11}1213return true;14}1516public int cut(String s, int i, int n, int dp[]) {17if (i == n) return 0;18if (dp[i] != -1) return dp[i];1920int min = Integer.MAX_VALUE;21for (int j = i; j < n; j++) {22if (pali(i, j, s)) {23int cost = 1 + cut(s, j + 1, n, dp);24min = Math.min(min, cost);25}26}2728return dp[i] = min;29}3031public int minCut(String s) {32int n = s.length();33dp = new int[n];34Arrays.fill(dp, -1);3536return cut(s, 0, n, dp) - 1;37}38}