字符串压缩

字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。

示例1:

输入:"aabcccccaaa"
输出:"a2b1c5a3"
示例2:

输入:"abbccd"
输出:"abbccd"
解释:"abbccd"压缩后为"a1b2c2d1",比原字符串长度更长。
提示:

字符串长度在[0, 50000]范围内。

思路:写篇记录的目的的记录一下靠自己想出来解决问题的思路,可能有不足,慢慢进步
1.判断字符串是否无效(为空或长度为0)
2.cur指向当前的字符1,一开始的curCount=1,记录当前种类字符的个数
3.依次遍历字符串中的每一个字符,如果该字符与该字符的下一个字符相同,那么就CurCount加一
4.如果不同,就指向新的字符,保存前一个字符的统计个数
我做了一丢丢判断,这是被系统教育的结果,哭,因为常常没有将最后字符的统计放入res,所以加了判断

class Solution {
    public String compressString(String s) {
        if(s==null||s.length()==0){
            return s;
        }
        char[] ca=s.toCharArray();
        char cur=ca[0];
        int curCount=1;
        StringBuilder res=new StringBuilder();
        res.append(ca[0]);
        for(int i=0;i<ca.length-1;i++){
            if(cur==ca[i+1]){
                curCount++;
                if(i==ca.length-2) res.append(curCount); //最后一次要计数要加入结果
            }else{
                cur=ca[i+1];
                res.append(curCount);
                res.append(cur);
                curCount=1;
                if(i==ca.length-2) res.append(curCount); //同理
            }
        }
        return res.toString().length()<s.length()?res.toString():s;
    }
}

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/compress-string-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

posted @ 2020-03-16 20:56  梦小冷  阅读(4682)  评论(0编辑  收藏  举报