题目描述有问题,先不管,记忆下思路。用一个26长度的数组记录每个字母
出现的次数,然后将次数分别化作位数(长度),最后加起来总和。
class Solution {
public int compress(char[] chars) {
int result=0;
int[] nums=new int[26]; //数组装入每个字母出现的次数
for(char c:chars){
nums[c-'a']++;
}
for(int i=0;i<nums.length;++i){
if(nums[i]==0)
return result; //如果字母是按照顺序规则出现,当出现为0的数组值,说明已经遍历完;如果不是这个规则,那这里不能return,要继续遍历
if(nums[i]==1) //个数为1,则直接加1
result+=1;
else result+=getCountBit(nums[i])+1;//1是字母本身占一个长度,getCountBit()返回该字母个数的位数(如输入109,返回的是3)
}
return result;
}
private int getCountBit(int count){
int result=0;
while(count>0){
result++;
count/=10;
}
return result;
}
}
LeetCode No.443压缩字符串
最新推荐文章于 2022-06-19 19:26:02 发布