题目:
比如输入为aaabbc,输出a3b2c1
完整解答:
public class Other { static String func(String str) { StringBuffer result = new StringBuffer(); if (str.length() == 1) { result.append(str.charAt(0)); result.append('1'); return result.toString(); } else { // string length >= 2 result.append(str.charAt(0)); int c = 1; for (int i = 0; i < str.length() - 1; i++) { if (str.charAt(i) == str.charAt(i + 1)) { c++; } else { result.append(Integer.toString(c).toCharArray()); result.append(str.charAt(i+1)); c = 1; } } result.append(Integer.toString(c).toCharArray()); return result.toString(); } } public static void main(String[] args) { String str = "abcdefg"; System.out.println(func(str)); } }
遍历指针为i,由于要用到i+1,考虑到charAt方法潜在越界可能,所以将情况分为两种:1、String的长度为1;2、String的长度大于1.
我之前遇到一个抉择,当str.charAt(i)!=str.charAt(i+1)时,是append(i)呢,还是append(i+1)呢?经过实验,是应该将i+1处的那个字符append起来比较好,这样做也要求了在一开始处append(str.charAt(0)),以及在最后补上一个append(c(to char))。