Java实现查找用户输入中连续重复最多数字串的技术问询
解决思路与完整代码实现
嘿,我来帮你搞定这个需求!首先得指出你现有代码里的一个小问题:用int接收输入的数字串是有风险的——如果用户输入的数字串太长(比如超过10位,超出Java int的取值范围),sc.nextInt()会直接抛出异常,而且我们要处理的是字符层面的连续重复,直接读字符串才是正确的打开方式。
下面咱们一步步完善代码:
第一步:修正输入读取与校验
先把输入改成读取字符串,同时确保输入全是数字:
Scanner sc = new Scanner(System.in); System.out.println("input string:"); String input = sc.nextLine().trim(); // 校验输入是否为纯数字串 if (!input.matches("\\d+")) { System.out.println("input-output error"); sc.close(); return; }
第二步:核心逻辑实现
我们需要遍历字符串,跟踪当前连续重复的字符、当前连续长度,同时记录最长的连续重复子串及其长度:
// 处理空输入的边界情况 if (input.isEmpty()) { System.out.println(""); sc.close(); return; } char currentChar = input.charAt(0); int currentCount = 1; String longestSubStr = String.valueOf(currentChar); int longestCount = 1; for (int i = 1; i < input.length(); i++) { char curr = input.charAt(i); if (curr == currentChar) { currentCount++; // 如果当前连续长度超过了之前记录的最长长度,更新结果 if (currentCount > longestCount) { longestCount = currentCount; longestSubStr = input.substring(i - currentCount + 1, i + 1); } } else { // 遇到新字符,重置当前跟踪的变量 currentChar = curr; currentCount = 1; } } // 输出最终结果 System.out.println(longestSubStr); sc.close();
逻辑说明
- 初始化:从字符串第一个字符开始,把它作为初始的当前字符和最长子串
- 遍历过程:
- 若当前字符和前一个相同,连续计数+1,一旦这个计数超过之前记录的最长长度,就更新最长子串
- 若遇到不同字符,就重置当前跟踪的字符和计数
- 边界处理:提前处理空输入的情况,避免索引越界
测试用例验证
- 输入
122113333443:遍历到3时连续计数达到4,超过之前的22和11的长度2,最终输出3333 - 输入
1224:连续最长的子串是22,输出符合预期
可选扩展
如果遇到多个长度相同的最长子串(比如输入112233),上面的代码会输出第一个出现的最长子串(11)。如果需要输出最后一个,只需把判断条件改成currentCount >= longestCount;如果要输出所有符合条件的子串,可以用一个List<String>来存储所有长度等于最长计数的子串,最后遍历输出。
内容的提问来源于stack exchange,提问作者Denijs
相关产品推荐
相关产品推荐

