题目:
给你一个字符数组 chars
,请使用下述算法压缩:
从一个空字符串 s
开始。对于 chars
中的每组 连续重复字符 :
- 如果这一组长度为
1
,则将字符追加到s
中。 - 否则,需要向
s
追加字符,后跟这一组的长度。
压缩后得到的字符串 s
不应该直接返回 ,需要转储到字符数组 chars
中。需要注意的是,如果组长度为 10
或 10
以上,则在 chars
数组中会被拆分为多个字符。
解题思路:
字符串: aaabbbcccddd, 此时我们的解题思路是,通过循环进行遍历,遍历中如果前一个字母和当前位置遍历的字母不相同,我们将前一个字母加入到字符串中,如果前一个字母和后一个字母相同我们将其计数加1最后输出结果即为我们所需要的字符串。
需要的变量:
输出结果的字符串 temp
两个指针 i,j 用来判断前后两个字母是否相同。
计数变量 count
public class Test{
public static void main(String[] args){
}
public static String test(String str){
String temp = ""; // 存储新字符串的数组
if(str=="") return temp; // 如果我们传进来的字符串为空那么直接结束
// 通过循环进行遍历
int count = 1; // 用来计数 重复的字母
for(int i=0; i<str.length();i++){
int j = i-1; // 第二个指针
if(str.charAt(i)!=str.chartAt(j)){
str+=str.charAt(j)+""+count;
count=1; // 将其重置为1
}else{
count++;
}
}
// 这里是个坑,假如我们直接跳出循环的话直接输出字符串则会出现最后一段相同的字母没有被记录
// 所以我们需要将最后一个字母加到字符串上,然后进行输出。
str+=str.charAt(str.length-1)+""+count; // 这里我们区最后一个字母。
return temp;
}
}