Leetcode-面试题 01.06 字符串压缩

面试题 01.06. 字符串压缩

解题思路

1.判断字符串长度,如果小于等于1,则直接返回S
2.for循环判断
1)如果下一个字符与当前字符相等,则k++
2)如果下一个字符与当前字符不相等,则可不再相加
3)把当前结果,做string加法
3.继续循环判断
4.判断string与S长度,输出结果

解题遇到的问题

1.耗时与内存较大,需要优化
2.尝试将string操作换成了stringbuilder,解决耗时和内存问题
3.StringBuilder构造方法,字符传入和字符串传入有区别

后续需要总结学习的知识点

##解法1
class Solution {
 public static String compressString(String S) {
        if (S.length() <= 1) {
            return S;
        }

        char[] cs = S.toCharArray();
        String string = String.valueOf(cs[0]);
        int k = 1;
        for (int i = 1; i < cs.length; i++) {
            if (string.endsWith(String.valueOf(cs[i]))) {
                k++;
            } else {
                string += k;
                string += cs[i];
                k = 1;
            }
        }
        string += k;
        if (string.length() >= S.length()) {
            return S;
        } else {
            return string;
        }
    }
}

##解法2
class Solution {
public static String compressString(String S) {
        if (S.length() <= 1) {
            return S;
        }

        StringBuilder builder = new StringBuilder();
        char ch = S.charAt(0);
        int k = 1;
        for (int i = 1; i < S.length(); i++) {
            if (ch == S.charAt(i)) {
                k++;
            } else {
                builder.append(ch);
                builder.append(k);
                ch = S.charAt(i);
                k = 1;
            }
        }
        builder.append(ch);
        builder.append(k);
        if (builder.toString().length() >= S.length()) {
            return S;
        } else {
            return builder.toString();
        }
    }
}

你可能感兴趣的:(Leetcode-面试题 01.06 字符串压缩)