压缩或者解压缩字符串 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技术 编程开发经验 企业通用技术

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 腾讯音乐求职进展汇总 #
67462次浏览 364人参与
# 机械人的薪资开到多少,才适合去? #
91592次浏览 396人参与
# 招行数字金融训练营 #
53821次浏览 251人参与
# 携程求职进展汇总 #
217660次浏览 1889人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
181792次浏览 1314人参与
# 面试之前应该如何准备? #
9136次浏览 307人参与
# 腾讯云智研发2025实习生招聘 #
33888次浏览 354人参与
# 如何看待应届生身份? #
13844次浏览 252人参与
# 通信和硬件还有转码的必要吗 #
48116次浏览 494人参与
# 双非本科的出路是什么? #
111302次浏览 1083人参与
# 0offer互助地 #
303370次浏览 2530人参与
# 你遇到过哪些神仙同事 #
55782次浏览 552人参与
# 总结:offer选择,我是怎么选的 #
102108次浏览 740人参与
# 选了这个offer,你有没有后悔? #
499755次浏览 3606人参与
# 腾讯云智研发工作体验 #
15533次浏览 121人参与
# 工作中,努力重要还是选择重要? #
89034次浏览 1218人参与
# 招银网络求职进展汇总 #
95646次浏览 608人参与
# lastday知无不言 #
42852次浏览 404人参与
# 学历or实习经历,哪个更重要 #
81024次浏览 625人参与
# 第一份工作应该选高薪还是热爱? #
38738次浏览 347人参与
# 今年秋招哪家公司给的薪资最良心? #
188965次浏览 1108人参与
# 毕业后不工作的日子里我在做什么 #
150347次浏览 1313人参与
牛客网
牛客企业服务