题解 | #基本字符串压缩#
基本字符串压缩
http://www.nowcoder.com/practice/21f3a84300c94db092e0b5a7bf2d0ad1
双指针i,j
i每次找到新的字符,j从i开始向右计数:
(1)如果i,j字符指向的相同,则j向右依次遍历,统计个数;
(2)如果不同,则j所在的位置为新的i位置,j继续从这个位置开始。
注意:结尾时的字符要特别考虑。
import java.util.*; public class Zipper { public String zipString(String iniString) { // write code here if(iniString == null || iniString.length() == 0){ return iniString; } StringBuilder sb = new StringBuilder(); int i = 0 , j = 1; int count = 1; while(j < iniString.length()){ if(iniString.charAt(j) == iniString.charAt(i) ){ //存在重复的字符 count ++; j ++; //重复字符直到最后一个位置,由于没有下一个了,所以这里就要保存 if(j == iniString.length()){ sb.append(iniString.charAt(i)); sb.append(count); } }else{ //不存在重复的字符 sb.append(iniString.charAt(i)); sb.append(count); i = j ; j = i + 1; count = 1; } } return sb.length() > iniString.length() ? iniString : sb.toString(); } }