其他分享
首页 > 其他分享> > 01.06 字符串压缩

01.06 字符串压缩

作者:互联网

01.06 字符串压缩

1、题目

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

1)示例1

输入:"aabcccccaaa"
 输出:"a2b1c5a3"

2)示例2

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

2、初步作答

2.1 思路

2.2 做法

2.3 代码

public class String_compression {
    public static void main(String[] args) {
        String s1;
        s1 = "aabbbcccaaaa";
        System.out.println(s1);
        s1 = compressString(s1);
        System.out.println(s1);
    }

    public static String compressString(String S) {
        if(S.isEmpty()){
            return S;
        }
        char[] Sarr = new char[S.length()];//创建数组存储压缩字符串的数据
        int[] Snum = new int[S.length()];//压缩后字符的个数
        StringBuffer s =new StringBuffer();//存储压缩后的字符串
        char Sc;
        int l = -1;
        for (int i = 0; i < S.length(); i++) {//将压缩数据存入数组Sarr中
            Sc = S.charAt(i);
            if(l == -1){
                l++;
                if(Sc != Sarr[l]){
                    Sarr[l] = Sc;
                    Snum[l] = Snum[l] + 1;
                }else{
                    Snum[l] = Snum[l] + 1;
                }
            }else{
                if(Sc != Sarr[l]){
                    l++;
                    Sarr[l] = Sc;
                    Snum[l] = Snum[l] + 1;
                }else{
                    Snum[l] = Snum[l] + 1;
                }
            }
        }
        for (int i = 0; i < l+1; i++) {
            s.append(Sarr[i]);
            s.append(Snum[i]);
        }
        String ss = s.toString();
        if(ss.length() < S.length()){
            return ss;
        }else{
            return S;
        }
    }
}

执行用时:6 ms, 在所有 Java 提交中击败了28.80%的用户

内存消耗:41.3 MB, 在所有 Java 提交中击败了11.17%的用户

通过测试用例:32 / 32

3、其余解法

力扣官方代码

class Solution {
    public String compressString(String S) {
        if (S.length() == 0) { // 空串处理
            return S;
        }
        StringBuffer ans = new StringBuffer();
        int cnt = 1;
        char ch = S.charAt(0);
        for (int i = 1; i < S.length(); ++i) {
            if (ch == S.charAt(i)) {
                cnt++;
            } else {
                ans.append(ch);
                ans.append(cnt);
                ch = S.charAt(i);
                cnt = 1;
            }
        }
        ans.append(ch);
        ans.append(cnt);
        return ans.length() >= S.length() ? S : ans.toString();
    }
}

标签:String,int,压缩,length,01.06,字符串,Snum
来源: https://www.cnblogs.com/myjava-study/p/15895950.html