美文网首页
27、字符串的排列

27、字符串的排列

作者: quiterr | 来源:发表于2017-09-02 21:44 被阅读0次

    题目描述
    输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
    输入描述:
    输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

    这题一开始忽视了要按字母顺序打印。不百度真的记不住char[]转String、Arrays.sort、substring()等细节~

    import java.util.*;
    public class Solution {
        public ArrayList<String> Permutation(String str) {
            
            ArrayList<String> ret = new ArrayList<>();
            if(str==null){
                return ret;
            }
            if(str.length()==1){
                ret.add(str);
                return ret;
            }
            
            //题目要求按字母顺序打印,需先排序
            str = strSort(str);
            Set<Character> set = new HashSet<>();
            
           for(int i=0; i<str.length(); i++){
               if(set.contains(str.charAt(i))){
                   continue;
               }
               set.add(str.charAt(i));
               StringBuffer sb = new StringBuffer(str);
               char head = sb.charAt(i);
               sb.setCharAt(i,str.charAt(0));
               
               ArrayList<String> list = Permutation(sb.substring(1,sb.length()));
               for(String s: list){
                   ret.add(head+s);
               }
           }
            return ret;
        }
        
        public String strSort(String str){
            char[] chars = str.toCharArray();
            Arrays.sort(chars);
            return String.valueOf(chars);
        }
    }
    

    相关文章

      网友评论

          本文标题:27、字符串的排列

          本文链接:https://www.haomeiwen.com/subject/nvlcwttx.html