welcome to my blog 程序员面试金典 01.06 字符串压缩 (Java版; Easy) 题目描述 字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为 a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。 示例1: 输入:"aabcccccaaa" 输出:"a2b1c5a3" 示例2: 输入:"abbccd" 输出:"abbccd" 解释:"abbccd"压缩后为"a1b2c2d1",比原字符串长度更长。 提示: 字符串长度在[0, 50000]范围内。 第一次做; 核心:1) 双指针, 固定left, 移动right /* 双指针: 固定left, 移动right; 这个思路在删除链表的重复节点中用过 */ class Solution { public String compressString(String S) { if(S==null || S.length()<=1){ return S; } StringBuilder sb = new StringBuilder(); int n = S.length(), left=0, right=0, count=0; while(right<n){ if(S.charAt(right)==S.charAt(left)){ count++; right++; } else{ sb.append(S.charAt(left)).append(count); count=0; left=right; } } if(count>0){ sb.append(S.charAt(left)).append(count); } return sb.length()>=n? S : sb.toString(); } }