Given a string, find all permutations of it without duplicates.
Example
Example 1:
Input: "abb"
Output:
["abb", "bab", "bba"]
Example 2:
Input: "aabb"
Output:
["aabb", "abab", "baba", "bbaa", "abba", "baab"]
思路:将string转换成char array,然后permuation,注意要去重复;
public class Solution {
/**
* @param str: A string
* @return: all permutations
*/
public List<String> stringPermutation2(String str) {
List<String> list = new ArrayList<String>();
if(str == null){
return list;
}
char[] chars = str.toCharArray();
Arrays.sort(chars);
boolean[] visited = new boolean[chars.length];
StringBuilder sb = new StringBuilder();
dfs(chars, visited, sb, list);
return list;
}
private void dfs(char[] chars,
boolean[] visited,
StringBuilder sb,
List<String>list) {
if(sb.length() == chars.length){
list.add(new String(sb.toString()));
return;
}
for(int i = 0; i < chars.length; i++) {
if(visited[i]) {
continue;
}
if(i > 0 && chars[i] == chars[i-1] && !visited[i-1]) {
continue;
}
sb.append(chars[i]);
visited[i] = true;
dfs(chars,visited, sb, list);
visited[i] = false;
sb.deleteCharAt(sb.length() -1);
}
}
}