一、题目
有重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合。
二、解题思路
与面试题08.07 无重复字符串排列组合思想类似http://t.csdn.cn/6Kul2,只需要将list换成set去重就可以了。
三、代码
class Solution {
Set<String> set=new HashSet<String>();
public String[] permutation(String S) {
int len=S.length();
fun(S.toCharArray(),0, new StringBuffer(),new boolean[len]);
return set.toArray(new String[set.size()]);
}
public void fun(char[] arr,int idx,StringBuffer buf,boolean[] visited) {
if(buf.length()==arr.length) {
set.add(new String(buf.toString()));
return;
}
for(int i=0;i<arr.length ;i++) {
if(!visited[i]) {
visited[i]=true;
buf.append(arr[i]);
fun(arr,i,buf,visited);
visited[i]=false;
buf.deleteCharAt(buf.length()-1);
}
}
}
}