面试题 01.06. 字符串压缩

Posted 数据结构和算法

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题 01.06. 字符串压缩相关的知识,希望对你有一定的参考价值。

截止到目前我已经写了 500多道算法题,其中部分已经整理成了pdf文档,目前总共有1000多页(并且还会不断的增加),大家可以免费下载
下载链接https://pan.baidu.com/s/1hjwK0ZeRxYGB8lIkbKuQgQ
提取码:6666



视频链接

再来看下代码

public String compressString(String S) {
    //边界条件判断
    if (S == null || S.length() == 0)
        return S;

    StringBuilder res = new StringBuilder();
    //当前字符
    char curChar = S.charAt(0);
    //当前字符的数量
    int curCharCount = 1;
    for (int i = 1; i < S.length(); i++) {
        //如果当前字符有重复的,统计当前字符的数量
        if (S.charAt(i) == curChar) {
            curCharCount++;
            continue;
        }
        //走到这里,说明遇到了新的字符,
        //这里先把当前字符和他的数量加入到res中
        res.append(curChar).append(curCharCount);
        //然后让当前字符指向新的字符,并且数量也要
        //重新赋值为1
        curChar = S.charAt(i);
        curCharCount = 1;
    }
    //因为上面计算的时候会遗漏最后一个字符和他的数量,
    //这要添加到res中
    res.append(curChar).append(curCharCount);

    //根据题的要求,若“压缩”后的字符串没有变短,
    // 则返回原先的字符串
    return res.length() >= S.length() ? S : res.toString();
}

还可以换另一种方式,先把当前字符加入到res中,当遇到新的字符的时候再把当前字符的数量加进来,其实原理都差不多,我们来看下

public String compressString(String S) {
    //边界条件判断
    if (S == null || S.length() == 0)
        return S;
    StringBuilder res = new StringBuilder();
    //先把第一个字符添加到res中
    res.append(S.charAt(0));
    int count = 1;
    for (int i = 1; i < S.length(); i++) {
        //判断重复字符的数量
        if (S.charAt(i) == S.charAt(i - 1)) {
            count++;
            continue;
        }
        //走到这里,说明遇到了新的字符,先把前面字符
        //的数量添加到res中,然后再添加这个新的字符
        res.append(count).append(S.charAt(i));
        count = 1;
    }
    //上面的计算会遗漏最后一个字符的数量,这里加上
    res.append(count);
    return res.length() >= S.length() ? S : res.toString();
}

以上是关于面试题 01.06. 字符串压缩的主要内容,如果未能解决你的问题,请参考以下文章

面试题 01.06. 字符串压缩

LeetCode | 面试题 01.06. 字符串压缩Python

程序员面试金典-面试题 01.06. 字符串压缩

面试题 01.06. 字符串压缩

面试题 01.06. 字符串压缩

[LeetCode]面试题 01.06. 字符串压缩