给定一个字符串(只包含小写英文字母),按顺序执行以下两条规则,输出计算后的字符串。


题目规则

规则 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. 规则按规则1,规则2顺序执行。先执行1,后执行2。
    1. 请注意边界值的考虑,注意连续出现条件匹配的情况。
    1. 请注意字符串拼接的性能消耗。
    1. 请先花一定时间理清思路在再编写代码。
    1. 可以试着把上面总体实例中的例子跑正确后再提交。
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();
    }


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM