欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

字符串排列

程序员文章站 2022-07-12 09:08:15
...
import java.util.ArrayList;
import java.util.Arrays;
public class Solution {
    public ArrayList<String> Permutation(String str) {
        int len=str.length();
        ArrayList<String> list=new ArrayList<>();
        if(len==0){
            return list;
        }
        //对字符串进行排序
        String[] ref=new String[len];
        for(int i=0;i<str.length();i++){
            ref[i]=str.charAt(i)+"";
        }
        Arrays.sort(ref);
        StringBuilder sb=new StringBuilder("");
        boolean[] bo=new boolean[str.length()];
        for(int i=0;i<ref.length;i++){
            sb.append(ref[i]);
        }
        str=sb.toString();
        StringBuilder sb1=new StringBuilder("");
        find(sb1,bo,list,str);
        return list;
    }
    public void find(StringBuilder sb,boolean[] bo,ArrayList<String> list,String c){
        if(sb.length()==c.length()){
            list.add(new String(sb.toString()));
            return;
        }
        for(int i=0;i<c.length();i++){
            if(bo[i]==false){
                bo[i]=true;
                String f=c.charAt(i)+"";
                find(new StringBuilder(sb.append(f)),bo,list,c);
                sb.delete(sb.length()-1,sb.length());
                bo[i]=false;
                //当前为的字符不能一样,
                if(i<c.length()-1&&(c.charAt(i)+"").equals(c.charAt(i+1)+"")){
                        i++;
                }
                 
            }
        }
    }
}