字符串的排列

字符串的排列

https://www.nowcoder.com/practice/fe6b651b66ae47d7acce78ffdd9a96c7?tpId=196&tags=&title=&diffculty=0&judgeStatus=0&rp=1&tab=answerKey

public ArrayList<String> Permutation(String str) {
       ArrayList<String> res = new ArrayList<>();
       if(str==null) return res;
       //存储字符串中每个字符的个数
       Map<Character,Integer> map = new HashMap<>(); 
       for(char c:str.toCharArray()){
           int cnt = map.getOrDefault(c,0);
           map.put(c,cnt+1);
       }
       //按顺序存储小写字母和大写字母
       char[] bj =new char[52];
       for(int i=0;i<26;i++){
           bj[i] = (char)('A'+i);
           bj[i+26]=(char)('a'+i);
       }
       //在递归过程中存储结果
       char[] zres = new char[str.length()];
       dfs(res,0,map,zres,bj);
       return res;
    }
    private void dfs(ArrayList<String> res,int index,
                     Map<Character,Integer> map,
                    char[] zres,char[] bj){
        if(index==zres.length) {
            res.add(new String(zres));
            return;
        }
        //循环遍历bj,从小到大去遍历
        //每次取最小的字符存到zres中,保证按照字典序排列
        for(char a:bj){
            //字符串中包含这个字符并且这个字符个数不为0
            if(map.containsKey(a) && map.get(a)!=0){
                int cnt = map.get(a);
                map.put(a,cnt-1);
                zres[index]=a;
                dfs(res,index+1,map,zres,bj);
                map.put(a,cnt);//回溯
            }
        }
    }
全部评论

相关推荐

暴走萝莉莉:这是社招场吧,作为HR说个实话:这个维护关系的意思是要有政府资源,在曾经的工作中通过人脉资源拿下过大订单的意思。这个有相关管理经验,意思也是真的要有同岗位经验。应酬什么的对于业务成交来说就算不乐意也是常态,就是要求说话好听情商高,酒量好。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务