一、题目描述
输入一个字符串,返回其最长的数字子串,以及其长度。
若有多个最长的数字子串,则将它们全部输出(按原字符串的相对位置)。
本题含有多组样例输入。
数据范围:
字符串长度 1≤n≤200 , 保证每组输入都至少含有一个数字。
二、输入描述
输入一个字符串。
三、输出描述
输出字符串中最长的数字字符串和它的长度,中间用逗号间隔。
如果有相同长度的串,则要一块儿输出(中间不要输出空格)。
四、解题思路
- 输入一个字符串;
- 使用正则表达式[^0-9]+ 将字符串分隔为数字子串和非数字子串;
- 定义一个最长数字子串的长度max,初始化为0;
- 定义一个集合,存储最长数字子串;
- 如果字符串长度大于max,则更新max,清空maxList,并将str添加到maxList中;
- 如果字符串长度等于max,则也是符合要求的最长数字字符串,添加到maxList中;
- 输出最长的数字字符串列表;
- 输出最长数字字符串的长度;
五、Java算法源码
public static void main(String[] args) throws Exception{
// 输入一个字符串
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()){
String line = sc.nextLine();
// 使用正则表达式[^0-9]+ 将字符串分隔为数字子串和非数字子串
String[] arr = line.split("[^0-9]+");
// 最长数字子串的长度
int max = 0;
// 存储最长数字子串
ArrayList<String> maxList = new ArrayList<>();
for(String str : arr){
// 如果字符串长度大于max,则更新max,清空maxList,并将str添加到maxList中。
if(str.length() > max){
max = str.length();
maxList.clear();
maxList.add(str);
// 如果字符串长度等于max,则也是符合要求的最长数字字符串,添加到maxList中;
}else if(str.length() == max){
maxList.add(str);
}
}
// 输出最长的数字字符串列表
StringBuilder builder= new StringBuilder();
for(String item : maxList){
builder.append(item);
}
// 输出最长数字字符串的长度
builder.append(",").append(max);
System.out.println(builder.toString());
}
}
六、效果展示
1、输入
nezha123love521java1234666
2、输出
1234666,7
3、说明
找出字符串中最长的连续数字字符串。
这道题属于送分题,大家好好把握。
字符串中符合要求的连续字符串有123、521、1234666,最长的数字字符串为1234666,长度7。
🏆华为OD机试真题 JavaScript 实现【在字符串中找出连续最长的数字串】【2023 B卷 100分】,附详细解题思路
🏆下一篇:华为OD机试真题 Java 实现【跳房子II】【2023 B卷 100分】,附详细解题思路
🏆本文收录于,华为OD机试(JAVA)(2022&2023)
本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。