--- title: 131. Palindrome Partitioning tags: String description: share source code. --- # 131. Palindrome Partitioning ```java= class Solution { public List<List<String>> partition(String s) { int n = s.length(); boolean dp [][] = new boolean [n + 1][n + 1]; List<List<String>> ans = new ArrayList<>(); helper(s, 0, dp , new ArrayList<>(), ans); return ans; } public void helper(String s, int start, boolean dp [][], List<String> choose, List<List<String>> ans){ int n = s.length(); if(start >= n){ ans.add(new ArrayList<>(choose)); return; } for(int end = start; end < n; end ++){ if(s.charAt(start) == s.charAt(end) && (end - start <= 1 || dp[start + 1][end - 1])){ dp [start][end] = true; choose.add(s.substring(start, end + 1)); helper(s, end + 1, dp, choose, ans); choose.remove(choose.size() - 1); } } } } ```