基本字串壓縮(Java)
阿新 • • 發佈:2019-02-03
利用字元重複出現的次數,編寫一個方法,實現基本的字串壓縮功能。比如,字串“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")); } }