利用字符串重复出现的次数,编写一个方法,实现基本的字符串压缩功能
/* * 利用字符串重复出现的次数,编写一个方法,实现基本的字符串压缩功能,比如字符串aabcccccaaa * 会变成a2b1c5a3,若压缩后的字符串没有变短,则返回原来的字符串 * * 思路: * 我们会迭代访问字符串,将字符拷贝到新字符串,并数出重复字符,在这里建立使用stringbuffer而不是用string * * */ public class StringCount { String compressBetter(String str) { //检查压缩之后的长度有没有变长? int size=countCompression(str); if(size>=str.length()) { return str; } StringBuffer mystr=new StringBuffer(); char last = str.charAt(0); int count=1; for(int i=1;i<str.length();i++) { if(str.charAt(i)==last)//如果是重复字符 count++; else //插入字符的次数和更新last字符 { mystr.append(last); mystr.append(count); last=str.charAt(i); count=1; } } mystr.append(last); mystr.append(count); return mystr.toString(); } /* * * 该函数计算出压缩后字符串的长度*/ int countCompression(String str) { if(str==null || str.isEmpty()) return 0; char last=str.charAt(0); int size=0; int count=1; for(int i=1;i<str.length();i++) { if(str.charAt(i)==last) count++; else { last=str.charAt(i); size+=1+String.valueOf(count).length(); count=1; } } size+=1+String.valueOf(count).length(); return size; } public static void main(String[] args) { // TODO Auto-generated method stub StringCount obj = new StringCount(); String str="aabcccccaaa"; System.out.println(obj.compressBetter(str)); } }
2014-09-0510:31:45