将相同字符统计出个数放在字符后,原地修改
解题思路:双指针做法,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 }