一种字符串压缩表示的解压

标题:一种字符串压缩表示的解压 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限
有一种简易压缩算法:针对全部由小写英文字母组成的字符串,将其中连续超过两个相同字母的部分压缩为连续个数加该字母,其他部分保持原样不变。例如:字符串“aaabbccccd”经过压缩成为字符串“3abb4cd”。 请您编写解压函数,根据输入的字符串,判断其是否为合法压缩过的字符串,若输入合法则输出解压缩后的字符串,否则输出字符串“!error”来报告错误


import java.util.Scanner;

public class Main {

    public static boolean isD(char c) {
        return c >= '0' && c <= '9';
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str = scanner.next();
        StringBuilder res = new StringBuilder();
        char last = 0;
        int len = 0;
        int same = 0;
        for (int i = 0; i < str.length(); ++i) {
            char c = str.charAt(i);

            if (!isD(c)) {
                if (c > 'z' || c < 'a') {
                    System.out.println("!error");
                    return;
                }
            }
            //判断相同的字符出现三次则error
            if (c == last) {
                same++;
                if (same >= 3 || len >= 1) {
                    System.out.println("!error");
                    return;
                }
            } else if (!isD(c)) {
                same = 1;
                last = c;
            }
            //如果是循环字符则直接拼接
            if ((!isD(c)) && len != 0) {
//                if (c == last) {
//                    System.out.println("!error");
//                    return;
//                }
                if (len <= 2) {
                    System.out.println("!error");
                    return;
                }
                for (int j = 0; j < len; ++j) {
                    res.append(c);
                }
                len = 0;
                last = c;
                continue;
            } else if ((!isD(c)) && len == 0) {
                res.append(c);
            }
            //如果是数字
            if (c >= '0' && c <= '9') {
                int t = c - '0';
                //数字以0开头则error
                if (c == '0' && len == 0) {
                    System.out.println("!error");
                    return;
                } else {
                    len = len * 10 + c - '0';
                }
            }
        }
        System.out.println(res.toString());
    }
}


全部评论

相关推荐

克蕾儿_:我不用点进来都知道评论区什么样子
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务