題目規則
規則 1:對於連續順序4位及以上的字母,中間使用“~”替換。
- 例如:ahhhhhhbcdefko, 替換后為ahhhhhhb~fko。
規則2:對於連續重復出現3個及以上的字母,以該字母+重復的個數替換。
- 例如:ahhhhhhbcdefko,替換后為ah6bcdefko。
- 總體示例:
- 輸入字符串為:ahhhhhhbcdefko 結果為:ah6b~fko
- 輸入字符串為:ahhhhhhbcdefko 結果為:ah6b~fko
- 輸入字符串為:ammmmmnopqko 結果為:am5~qko
- 輸入字符串為:abcdefffffadfasdfa 結果為:a~f5adfasdfa
- 輸入字符串為:mnopqqqrstabs 結果為:mq3tabs
- 輸入字符串為:xyzabcd 結果為:xyza~d
提示:
-
- 規則按規則1,規則2順序執行。先執行1,后執行2。
-
- 請注意邊界值的考慮,注意連續出現條件匹配的情況。
-
- 請注意字符串拼接的性能消耗。
-
- 請先花一定時間理清思路在再編寫代碼。
-
- 可以試着把上面總體實例中的例子跑正確后再提交。
String myMethod(String inData) {
StringBuffer sbu = new StringBuffer();
char[] abchar = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
char[] charArray = inData.toCharArray();
int temp = 1;
int c = 1; //初始
int tt = 1;
int tc = 1;
for (int i = 0; i < charArray.length - 1; i++) {
int pre = charArray[i];
int now = charArray[i + 1];
if (i == charArray.length - 2) {
if (now - pre == 1) {
temp++;
if (temp > 3) {
charArray[c + 1] = '~';
for (int j = c + 2; j < i + 1; j++) {
charArray[j] = ' ';
}
}
}
if (now == pre) {
tt++;
if (tt > 2) {
String ss = String.valueOf(tt);
for (int j = 0; j < ss.length(); j++) {
charArray[tc + j] = abchar[ss.toCharArray()[j] - '0'];
}
for (int j = tc + ss.length(); j < i + 2; j++) {
charArray[j] = ' ';
}
tt = 1;
}
}
} else {
if (now - pre == 1) {//如果是連續字符串,長度加一
temp++;
if (temp < 3) {
c = i;
}
} else {
//並且長度計算長度重新計為1
if (temp > 3) {
charArray[c + 1] = '~';
for (int j = c + 2; j < i; j++) {
charArray[j] = ' ';
}
}
c = i;
temp = 1;
}
}
if (now == pre) {
tt++;
if (tt < 3) {
tc = i + 1;
}
} else {
if (tt > 2) {
String ss = String.valueOf(tt);
for (int j = 0; j < ss.length(); j++) {
charArray[tc + j] = abchar[ss.toCharArray()[j] - '0'];
}
for (int j = tc + ss.length(); j < i + 1; j++) {
charArray[j] = ' ';
}
tt = 1;
}
tc = i;
}
}
for (int i = 0; i < charArray.length; i++) {
if (charArray[i] != ' ') {
sbu.append(charArray[i]);
}
}
return sbu.toString();
}