连续顺序替换 连续重复字母替换

package com.yinhai.onehour; // 包路径不可修改!!!

import java.util.*;  //只能使用最高1.8版本JDK提供的API

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

* 规则 1:对于连续顺序4位及以上的字母,中间使用“~”替换。 * 例如:ahhhhhhbcdefko, 替换后为ahhhhhhb~fko。 *

* 规则2:对于连续重复出现3个及以上的字母,以该字母+重复的个数替换。 * 例如:ahhhhhhbcdefko,替换后为ah6bcdefko。 *

* 总体示例: * 输入字符串为:ahhhhhhbcdefko 结果为:ah6b~fko * 输入字符串为:ahhhhhhbcdefko 结果为:ah6b~fko * 输入字符串为:ammmmmnopqko 结果为:am5~qko * 输入字符串为:abcdefffffadfasdfa 结果为:a~f5adfasdfa * 输入字符串为:mnopqqqrstabs 结果为:m~q3~tabs * 输入字符串为:xyzabcd 结果为:xyza~d *

* 提示: * 1. 规则按规则1,规则2顺序执行。先执行1,后执行2。 * 2. 请注意边界值的考虑,注意连续出现条件匹配的情况。 * 3. 请注意字符串拼接的性能消耗。 * 4. 请先花一定时间理清思路在再编写代码。 * 5. 可以试着把上面总体实例中的例子跑正确后再提交。 */ public class Template { //类名不可修改!!! /** * 程序逻辑请在该方法中完成 *

* 注意: * 1. 方法名、参数个数及类型不可更改,只可修改函数体!!! * 2. 提交文件时,保证包路径package com.yinhai.onehour * * @param inData 参数 验证程序通过该参数传入字符串 * @return 返回值 验证程序通过该返回值验证程序正确性 */ public String methodTest(String inData) { String outData = ""; outData+=rule1(inData); outData=rule2(outData); // outData = myMethod(inData); // 可添加自己的函数 return outData; } private String rule1(String inData) { StringBuilder outData =new StringBuilder(); for (int i = 0; i < inData.length(); i++) { int begin = i; //起始字母 char begin_char = inData.charAt(begin); //判断是否是最后一个字母 和 是否是连续4个字母 while (begin + 1 < inData.length() && inData.charAt(begin + 1) - begin_char == 1) { begin_char = inData.charAt(begin + 1); begin++; } //出现连续4个字符替换,否则不变 if (begin - i >= 3) { outData.append(inData.charAt(i) + "~" + inData.charAt(begin)); i = begin; } else { outData.append(inData.charAt(i)); } } return outData.toString(); } private String rule2(String inData) { StringBuilder outData = new StringBuilder(); for (int i = 0; i < inData.length(); i++) { int begin = i; //起始字母 char begin_ch = inData.charAt(begin); //判断是否是最后一个字母 和 连续3个字母是否相同 while (begin + 1 < inData.length() && inData.charAt(begin + 1) - begin_ch == 0) { begin_ch = inData.charAt(begin + 1); begin++; } //当连续3个字母相同时替换,否则不变 if (begin - i >= 2) { outData.append(inData.charAt(i) + "" + (begin - i + 1)) ; i = begin; } else { outData.append(inData.charAt(i)); } } return outData.toString(); } /** * 可修改,验证自己的答案 * * @param args */ public static void main(String[] args) { List inDatas = new ArrayList<>(); inDatas.add("ahhhhhhbcdefko"); inDatas.add("ahhhhhhbcdefko"); inDatas.add("ammmmmnopqko"); inDatas.add("abcdefffffadfasdfa"); inDatas.add("mnopqqqrstabs"); inDatas.add("xyzabcd"); List outDatas = new ArrayList<>(); outDatas.add("ah6b~fko"); outDatas.add("ah6b~fko"); outDatas.add("am5~qko"); outDatas.add("a~f5adfasdfa"); outDatas.add("m~q3~tabs"); outDatas.add("xyza~d"); // 用于自己校验结果 Template template = new Template(); long startTime = System.currentTimeMillis(); for (int i = 0;i < inDatas.size();i++) { String result = template.methodTest(inDatas.get(i)); System.out.println(result.equals(outDatas.get(i))); } long endTime = System.currentTimeMillis(); System.out.println("耗时(毫秒):" + (endTime - startTime)); } }

你可能感兴趣的:(算法)