給定一個字符串(只包含小寫英文字母),按順序執行以下兩條規則,輸出計算后的字符串。


題目規則

規則 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