解题思路
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();
}
}
}
网友评论