将字符串中的多个连续单词,只记录其数目。但是压缩后的字符串没有变短,仍然返回原先的字符串。
代码:
class Solution {
public String compressString(String S) {
char[] ss = S.toCharArray();
String s = "";
for (int i = 0; i < ss.length;) {
char c = ss[i++];
int num = 1;
while (i < ss.length && ss[i] == c) {
num++;
i++;
}
s = s + String.valueOf(c) + String.valueOf(num);
}
if (s.length() >= S.length()) return S;
return s;
}
}
这里使用 Java
进行编写,其主要是因为将数组转化为字符串比 C
较简单点。
C
当数字较大时,将数字转换为字符串就较为麻烦。同时,Java
也不用考虑超出内存的问题。
先获取每个字符,记录当前字符,如果下一个字符相等,则进入循环,直到下一个字符与当前记录的字符不相等,则退出循环。并记录字符和个数。最后判断压缩后的字符串与原字符串的大小,决定返回那个字符串。
结果:
写这个题目的时候,遇到在数组中使用 ss[i++]
时,不相等时仍会进入循环,这个问题不知道是 leetcode 编译器的问题,还是其他原因,以后尽量少使用这种模式。