目录
一、原题再现
描述
读入一个字符串str,输出字符串str中的连续最长的数字串
输入描述:
个测试输入包含1个测试用例,一个字符串str,长度不超过255。
输出描述:
在一行内输出str中里连续最长的数字串。
示例1
输入:
abcd12345ed125ss123456789
输出:
123456789
二、问题分析
本题使用一个Map集合和一个StringBuilder类。将String类转换成StringBuilder类,方便进行拼接操作。利用for循环结合if判断,如果在str.charAt(i)>='0'&&str.charAt(i)<='9'这个范围内,计数count加1。符合要求的连续数字用StringBuilder类append()方法拼接。
使用哈希HashMap,HashMap<Integer,String> hashMap=new HashMap<>();将数字串的长度作为Map的key值(Integer类型),将数字串作为Map的value值(String类型)。
定义ans作为数字串的最长值,每次比较count和ans的大小,如果count>ans就将count赋值给ans。
最后在HashMap中找出key值为ans的数字串。
注意:本题有一个易错点,例如123adf124345,最后一次为最大值而for循环跳出没有进行ans和count的比较。所以需要单独进行分析。见如下代码。
三、完整代码
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String []args) { HashMap<Integer, String> hashMap = new HashMap<>(); StringBuilder sb = new StringBuilder (); Scanner sc = new Scanner(System.in); String str = sc.nextLine(); int count = 0; int ans = 0; for (int i = 0; i < str.length(); i++) { if (str.charAt(i) >= '0' && str.charAt(i) <= '9') { count++; sb.append(str.charAt(i)); if (i < str.length() - 1) { //防止最后一次直接跳出没有进行下面步骤,例如123adf124345,结果就是123,走到5的时候直接跳出循环了 continue; } } hashMap.put(count, sb.toString()); if (count > ans) { ans = count; } sb = sb.delete(0, sb.length()); count = 0; } String ansStr = hashMap.get(ans); System.out.println(ansStr); } }