1. 程式人生 > >基本字串壓縮(Java)

基本字串壓縮(Java)

利用字元重複出現的次數,編寫一個方法,實現基本的字串壓縮功能。比如,字串“aabcccccaaa”經壓縮會變成“a2b1c5a3”。若壓縮後的字串沒有變短,則返回原先的字串。

給定一個string iniString為待壓縮的串(長度小於等於3000),保證串內字元均由大小寫英文字母組成,返回一個string,為所求的壓縮後或未變化的串。

測試樣例
"aabcccccaaa"
返回:"a2b1c5a3"
"welcometonowcoderrrrr"
返回:"welcometonowcoderrrrr"
注:簡單的對字串進行處理
package com.msjd.string;

import java.util.*;

public class Zipper {
    public String zipString(String iniString) {
    	int len = iniString.length();
    	int zipLen  = zipLength(iniString);
    	if(zipLen >= len)
    		return iniString;
    	// 考慮到字串拼接的時間複雜度為o(n2) 使用StringBuffer
    	StringBuffer sb = new StringBuffer();
    	char tmp = iniString.charAt(0);
		int countLen = 1;
		for(int i = 1; i < len; i++){
			if(iniString.charAt(i) == tmp){
				countLen++;
			}else{     // 當字串變化時 更新字串
				sb.append(tmp);
				sb.append(countLen);
				tmp = iniString.charAt(i);
				countLen = 1;
			}
		}
		sb.append(tmp);
		sb.append(countLen);
		
		return sb.toString();
        // write code here
    }

	public int zipLength(String iniString) {
		// TODO Auto-generated method stub
		int len = iniString.length();
		char tmp = iniString.charAt(0);
		int countLen = 1;
		for(int i = 1; i < len; i++){
			if(iniString.charAt(i) != tmp){
				countLen++;
				tmp = iniString.charAt(i);
			}
		}
		System.out.println(countLen*2);
		return countLen*2;
	}
	
	
	public static void main(String[] args) {
		Zipper zp = new Zipper();
		System.out.println(zp.zipString("aabcccccaaad"));
	}
	
	
}