LeedCode刷题:443.压缩字符串

将相同字符统计出个数放在字符后,原地修改

解题思路:双指针做法,read和write指针

 1 class Solution {
 2     public int compress(char[] chars) {
 3         int write=0;//写指针
 4         int anchor=0;//指向连续字符的第一个
 5         for(int read=0;read<chars.length;read++){
 6             if(read+1==chars.length||chars[read+1]!=chars[read]){//判断写入条件
 7                 chars[write++]=chars[anchor];//写入第一个字符,后使write++
 8                 if(read>anchor){//写入连续字符长度
 9                     for(char c:(""+(read-anchor+1)).toCharArray()){//将连续字符的出现次数的数字转为字符数组后,循环一个个取出并修改原chars,例如100,则为"1""0""0"
10                         chars[write++]=c;
11                     }
12                 }
13                 anchor=read+1;//修改连续字符的第一个字符到read+1位置,即字符变化位置
14                 }
15             }
16             return write;//write即为修改后数组的长度,write是写入字符和字符次数的总次数
17         }
18     }

 

上一篇:LeetCode 722. Remove Comments (删除注释)


下一篇:给小孩起名