面试题 01.06. 字符串压缩
Posted 数据结构和算法
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题 01.06. 字符串压缩相关的知识,希望对你有一定的参考价值。
截止到目前我已经写了 500多道算法题,其中部分已经整理成了pdf文档,目前总共有1000多页(并且还会不断的增加),大家可以免费下载
下载链接:https://pan.baidu.com/s/1hjwK0ZeRxYGB8lIkbKuQgQ
提取码:6666
再来看下代码
public String compressString(String S) {
//边界条件判断
if (S == null || S.length() == 0)
return S;
StringBuilder res = new StringBuilder();
//当前字符
char curChar = S.charAt(0);
//当前字符的数量
int curCharCount = 1;
for (int i = 1; i < S.length(); i++) {
//如果当前字符有重复的,统计当前字符的数量
if (S.charAt(i) == curChar) {
curCharCount++;
continue;
}
//走到这里,说明遇到了新的字符,
//这里先把当前字符和他的数量加入到res中
res.append(curChar).append(curCharCount);
//然后让当前字符指向新的字符,并且数量也要
//重新赋值为1
curChar = S.charAt(i);
curCharCount = 1;
}
//因为上面计算的时候会遗漏最后一个字符和他的数量,
//这要添加到res中
res.append(curChar).append(curCharCount);
//根据题的要求,若“压缩”后的字符串没有变短,
// 则返回原先的字符串
return res.length() >= S.length() ? S : res.toString();
}
还可以换另一种方式,先把当前字符加入到res中,当遇到新的字符的时候再把当前字符的数量加进来,其实原理都差不多,我们来看下
public String compressString(String S) {
//边界条件判断
if (S == null || S.length() == 0)
return S;
StringBuilder res = new StringBuilder();
//先把第一个字符添加到res中
res.append(S.charAt(0));
int count = 1;
for (int i = 1; i < S.length(); i++) {
//判断重复字符的数量
if (S.charAt(i) == S.charAt(i - 1)) {
count++;
continue;
}
//走到这里,说明遇到了新的字符,先把前面字符
//的数量添加到res中,然后再添加这个新的字符
res.append(count).append(S.charAt(i));
count = 1;
}
//上面的计算会遗漏最后一个字符的数量,这里加上
res.append(count);
return res.length() >= S.length() ? S : res.toString();
}
以上是关于面试题 01.06. 字符串压缩的主要内容,如果未能解决你的问题,请参考以下文章