程式設計師面試經典--字串壓縮
阿新 • • 發佈:2019-02-07
1.5問題:
利用字元重複出現的次數,編寫一個方法,實現基本的字串壓縮功能。比如,字串aabcccccaaa會變a2b1c5a3。若“壓縮”後的字串沒有變短,則返回原先的字串。
思考:怎樣降低時間複雜度,提高程式碼效率。防止做無用功,可先判斷壓縮串長度是否大於原串,若是則返回原串,若否則返回壓縮串。
import java.util.*; class compress{ public static void main(String args[]){ String str="aaabbbcccdddeeefffggg"; String mystr=compress(str); System.out.println(mystr); } public static String compress(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{ mystr.append(last); mystr.append(count); last=str.charAt(i); count=1; } } mystr.append(last); mystr.append(count); return mystr.toString(); } public static 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; } }