您的位置:首页 > 其它

字符串的排列

2016-12-25 16:04 113 查看
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。

先将原字符串按照字典序排列,直接用dfs实现全排列,然后去重

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;

public class Solution {
public ArrayList Permutation(String str) {
ArrayList list = new ArrayList() ;
if(str == null || str.length() == 0){
return list ;
}
char [] chs = str.toCharArray() ;
char [] ans = new char[chs.length] ;
boolean [] vis = new boolean[str.length()] ;
Arrays.sort(chs);
dfs(list , ans, chs , 0 , vis) ;
Collections.sort(list);
Iterator it = list.iterator() ;
String pre = it.next() ;
while(it.hasNext()){
String next = it.next() ;
if(pre.equals(next)){
it.remove();
}
pre = next ;
}
return list;
}

private void dfs(ArrayList list, char[] ans, char[] chs, int pos, boolean[] vis) {
if(chs.length == pos){
list.add(String.copyValueOf(ans)) ;
return ;
}
for(int i = 0;i < chs.length;i++){
if(vis[i])continue ;
vis[i] = true ;
ans[pos] = chs[i] ;
dfs(list , ans , chs , pos+1 , vis) ;
vis[i] = false ;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: