问题描述
LeetCode 面试题 01.06. 字符串压缩 (opens in a new tab),难度简单。
字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa
会变为a2b1c5a3
。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。
示例 1
输入:"aabcccccaaa" 输出:"a2b1c5a3"
示例 2
输入:"abbccd" 输出:"abbccd" 解释:"abbccd"压缩后为"a1b2c2d1",比原字符串长度更长。
提示:
- 字符串长度在[0, 50000]范围内。
题解
遍历
解题思路:遍历字符串
Solution.java
class Solution {
public String compressString(String s) {
// 判断是否是空字符串
if (s.isEmpty()) return s;
StringBuilder result = new StringBuilder();
result.append(s.charAt(0));
char[] chars = s.toCharArray();
int count = 1;
for (int i = 1; i < chars.length; ++i) {
// 判断是否是 chars[i - 1] 和 chars[i] 是否是相同字符
if (chars[i - 1] == chars[i]) {
++count;
} else {
// 添加数量以及新的字符
result.append(count).append(chars[i]);
// count 置为 1
count = 1;
}
}
// 添加最后一段相同的字符的长度
result.append(count);
return result.toString().length() < s.length() ? result.toString() : s;
}
}