Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Scanner;
- import java.util.List;
- import java.util.ArrayList;
- public class PalindromicDecomposition {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int t = sc.nextInt();
- sc.nextLine();
- while (t-- > 0) {
- String s = sc.nextLine();
- printNestedListOfString(palindromicPartitioning(s));
- }
- }
- public static List<List<String>> palindromicPartitioning(String input) {
- List<List<String>> result = new ArrayList<>();
- palindromicPartitioningHelper(input, 0, new ArrayList<String>(), result);
- return result;
- }
- public static void palindromicPartitioningHelper(String input, int idx, List<String> soFar, List<List<String>> result) {
- if (idx == input.length()) {
- result.add(new ArrayList<>(soFar));
- return;
- }
- for (int i = idx + 1; i <= input.length(); i++) {
- String prefix = input.substring(idx, i);
- if (isPalindrome(prefix)) {
- soFar.add(prefix);
- palindromicPartitioningHelper(input, i, soFar, result);
- soFar.remove(soFar.size() - 1);
- }
- }
- }
- public static boolean isPalindrome(String s) {
- for (int i = 0, j = s.length() - 1; i < j; i++, j--) {
- if (s.charAt(i) != s.charAt(j)) {
- return false;
- }
- }
- return true;
- }
- public static void printNestedListOfString(List<List<String>> outer) {
- StringBuilder sb = new StringBuilder();
- sb.append('[');
- for (List<String> inner : outer) {
- sb.append(inner.toString()).append(", ");
- }
- sb.deleteCharAt(sb.length() - 1);
- sb.deleteCharAt(sb.length() - 1);
- sb.append(']');
- System.out.println(sb.toString());
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment