1. 程式人生 > >程式設計師面試經典--字串壓縮

程式設計師面試經典--字串壓縮

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;
	}
}