压缩或者解压缩字符串 aaaaddcccmmm-> 4a2d3c3m

    /**
     * 压缩或者解压缩字符串 aaaaddcccmmm-> 4a2d3c3m
     *                    3c4f3d-> cccffffddd
     * @return
     */
    public static String zipOrUnZipStr(String srcStr){
        if (srcStr==null || srcStr.isEmpty()){
            return "!error";
        }
        if (srcStr.length()>100){
            return "!error";
        }
        for (int i = 0; i < srcStr.length(); i++) {
            char charTemp = srcStr.charAt(i);
            if (Character.isUpperCase(charTemp)){
                return "!error";
            }
            if (!(charTemp>='a' && charTemp <= 'z' || charTemp > '2')){
                return "!error";
            }
        }
        HashMap<Character, Integer> characterCntMap = new HashMap<>();
        StringBuilder stringBuilder = new StringBuilder();
        StringBuilder stringBuilder1 = new StringBuilder();
        //mm3c4f3daa-> mmcccffffdddaa
        for (int i = 0; i < srcStr.length(); i++) {
            char charTemp = srcStr.charAt(i);
            if (Character.isDigit(charTemp) && charTemp > '2'){
                char charAt = srcStr.charAt(i + 1);
                int intCnt = Integer.parseInt(String.valueOf(charTemp));
                for (int j = 0; j < intCnt; j++) {
                    stringBuilder.append(charAt);
                }
            }else{
                if (i>0){
                    char charAt = srcStr.charAt(i - 1);
                    if (!(Character.isDigit(charAt) && charAt > '2')){
                        stringBuilder.append(charTemp);
                    }
                }else {
                    stringBuilder.append(charTemp);
                }
                if (characterCntMap.containsKey(charTemp)){
                    characterCntMap.put(charTemp,characterCntMap.get(charTemp)+1);
                }else {
                    characterCntMap.put(charTemp,1);
                }
            }
        }
        //mmmmmmmmmaaccddddfff {a=2, c=2, d=3, f=3, m=9}
        //aaaaddcaccmmm-> 4a2d3c3m
        LinkedHashSet<Character> linkedHashSet = new LinkedHashSet<>();
        for (int j = 0; j < srcStr.length(); j++) {
            char charAt = srcStr.charAt(j);
            linkedHashSet.add(charAt);
        }
        for (Character e : linkedHashSet) {
            Integer integerCnt = characterCntMap.get(e);
            if (integerCnt!=null){
                if (integerCnt>2){
                    stringBuilder1.append(integerCnt);
                    stringBuilder1.append(e);
                }else {
                    for (int i = 0; i < integerCnt; i++) {
                        stringBuilder1.append(e);
                    }
                }
            }
        }
        for (int i = 0; i < srcStr.length(); i++) {
            char charAt = srcStr.charAt(i);
            if (Character.isDigit(charAt) && charAt > '2'){
                String retUnZipStr = stringBuilder.toString();
                if (retUnZipStr.length()>100){
                    return "!error";
                }else {
                    return retUnZipStr;
                }
            }
        }
        return stringBuilder1.toString();
    }

#牛友们的论文几号送审##如果你有一天可以担任公司的CEO,你会做哪三件事?##面试等了一周没回复,还有戏吗##实习要如何选择和准备?#
Java技术 文章被收录于专栏

JavaEE技术 编程开发经验 企业通用技术

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务