題目描述
利用字符重複出現的次數,編寫一個方法,實現基本的字符串壓縮功能。比如,字符串“aabcccccaaa”經壓縮會變成“a2b1c5a3”。若壓縮後的字符串沒有變短,則返回原先的字符串。
給定一個string iniString爲待壓縮的串(長度小於等於10000),保證串內字符均由大小寫英文字母組成,返回一個string,爲所求的壓縮後或未變化的串。
測試樣例
“aabcccccaaa”
返回:“a2b1c5a3”
“welcometonowcoderrrrr”
返回:“welcometonowcoderrrrr”
思路: 通過兩層循環,判斷前後是否是相同的字符,若相同則計數器+ 1, 不相同則跳出內層循環,並通過StringBuilder進行字符串拼接。
import java.util.*;
public class Zipper {
public String zipString(String iniString) {
StringBuilder sb = new StringBuilder();
//統計重複字母的個數
int count = 1;
char []a = iniString.toCharArray();
for(int i = 0; i < a.length; i += count) {
//計數器復位
count = 1;
for(int j = i+1; j < a.length; j++) {
if(a[i] == a[j]) {
count++;
}else {
//不相同則跳出循環
break;
}
}
//拼接字符串中的值
sb.append(a[i]).append(count);
}
String newstr = sb.toString();
//比較字符串的長度,確定返回值
if (iniString.length() <= newstr.length()) {
return iniString;
}else {
return newstr;
}
}
}