import java.util.ArrayList; import java.util.HashMap; import java.util.Map; public class Solution { public ArrayList<String> Permutation(String str) { char[] chars = str.toCharArray(); ArrayList<String> ans = new ArrayList<>(); boolean[] isVisited = new boolean[str.length()]; Map<String, Integer> map = new HashMap<>(); DFS3(ans, chars, isVisited, new StringBuilder(""), str.length(), map); return ans; } public void DFS3(ArrayList<String> ans, char[] chars, boolean[] isVisited, StringBuilder stringBuilder, int length, Map<String, Integer> map) { if (length == 0 && !map.containsKey(stringBuilder.toString())) { ans.add(stringBuilder.toString()); map.put(stringBuilder.toString(), 0); return; } else { for (int i = 0; i < chars.length; i++) { if (!isVisited[i]) { isVisited[i] = true; stringBuilder.append(chars[i]); DFS3(ans, chars, isVisited, stringBuilder, length - 1, map); isVisited[i] = false; stringBuilder.deleteCharAt(stringBuilder.length() - 1); } } } } }