1.5 题目:
字符串压缩功能。比如:给定字符串“aabbbbccaadd” 输出"a2b4c2a2",若压缩后的字符串没有变短,则输出原来字符串。
O(N) 解法:
利用StringBuffer构建新的字符串
- public static String compressDuplicate(String str){
- if(str == null || str.length() == 0)
- return null;
- 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{
- mystr.append(last);
- mystr.append(count);
- last = str.charAt(i);
- count = 1;
- }
- }
- mystr.append(last);
- mystr.append(count);
- if(mystr.length()>str.length()){
- return str;
- }
- return mystr.toString();
- }
测试用例:
- @Test
- public void test_1_5(){
- String str1 = "";
- String str2 = null;
- String str3 = "avsdqwe";
- String str4 = "aaaccccccfffgfgggg";
- System.out.println("str1" + StringUtil.compressDuplicate(str1));
- System.out.println("str2" + StringUtil.compressDuplicate(str2));
- System.out.println("str3" + StringUtil.compressDuplicate(str3));
- System.out.println("str4" + StringUtil.compressDuplicate(str4));
- }
输出结果:
str1null
str2null
str3avsdqwe
str4a3c6f3g1f1g4