package com.company; import java.util.*; /* * Permutations with Duplicates: Write a method to compute all permutations * of a string whose characters are not necessarily unique. The list of permutations should not have duplicates. * */ public class Main { public static void main(String[] args) { System.out.println("Hello World!"); String str = "abdccd"; String str1 = sortStr(str); List<String> result = new ArrayList<String>(); StringBuilder sb = new StringBuilder(); boolean[] visited = new boolean[str.length()]; permutation(result, str1, sb, visited); System.out.println(result); } public static void permutation(List<String> result, String str, StringBuilder sb, boolean[] visited) { if(sb.length() == str.length()) { result.add(sb.toString()); return; } for(int i = 0; i < str.length(); i++) { if(i > 0 && str.charAt(i - 1) == str.charAt(i) && !visited[i - 1]) { continue; } if(visited[i]) { continue; } sb.append(str.charAt(i)); visited[i] = true; permutation(result, str, sb, visited); sb.deleteCharAt(sb.length() - 1); visited[i] = false; } } public static boolean contains(StringBuilder sb, char ch) { for(int i = 0; i < sb.length(); i++) { if(sb.charAt(i) == ch) { return true; } } return false; } public static String sortStr(String str) { char[] ch = str.toCharArray(); Arrays.sort(ch); return new String(ch); } }