题目规则
规则 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();
}