华为OD机试真题 JavaScript 实现【在字符串中找出连续最长的数字串】【2023 B卷 100分】,附详细解题思路-LMLPHP

一、题目描述

输入一个字符串,返回其最长的数字子串,以及其长度。

若有多个最长的数字子串,则将它们全部输出(按原字符串的相对位置)。

本题含有多组样例输入。

数据范围:

字符串长度 1≤n≤200 , 保证每组输入都至少含有一个数字。

二、输入描述

输入一个字符串。

三、输出描述

输出字符串中最长的数字字符串和它的长度,中间用逗号间隔。

如果有相同长度的串,则要一块儿输出(中间不要输出空格)。

四、解题思路

  1. 输入一个字符串;
  2. 使用正则表达式[^0-9]+ 将字符串分隔为数字子串和非数字子串;
  3. 定义一个最长数字子串的长度max,初始化为0;
  4. 定义一个集合,存储最长数字子串;
  5. 如果字符串长度大于max,则更新max,清空maxList,并将str添加到maxList中;
  6. 如果字符串长度等于max,则也是符合要求的最长数字字符串,添加到maxList中;
  7. 输出最长的数字字符串列表;
  8. 输出最长数字字符串的长度;

五、Java算法源码

function findMaxStr(str) {
    // 使用正则表达式[^0-9]+ 将字符串分隔为数字子串和非数字子串
    const regex = /[^0-9]+/;
    const arr = str.split(regex);
    // 最长数字子串的长度
    let max = 0;
    // 存储最长数字子串
    const maxList = [];

    for (const item of arr) {
        // 如果字符串长度大于max,则更新max,清空maxList,并将str添加到maxList中。
        if (item.length > max) {
            max = item.length;
            maxList.length = 0;
            maxList.push(item);
        // 如果字符串长度等于max,则也是符合要求的最长数字字符串,添加到maxList中;
        } else if (item.length === max) {
            maxList.push(item);
        }
    }

    // 输出最长的数字字符串列表 + 最长数字字符串的长度
    const result = maxList.join('') + ',' + max;
    return result;
}

六、效果展示

1、输入

nezha123love521java1234666

2、输出

1234666,7

3、说明

找出字符串中最长的连续数字字符串。

这道题属于送分题,大家好好把握。

字符串中符合要求的连续字符串有123、521、1234666,最长的数字字符串为1234666,长度7。

华为OD机试真题 JavaScript 实现【在字符串中找出连续最长的数字串】【2023 B卷 100分】,附详细解题思路-LMLPHP


🏆华为OD机试真题 Java 实现【在字符串中找出连续最长的数字串】【2023 B卷 100分】,附详细解题思路

🏆下一篇:华为OD机试真题 Java 实现【跳房子II】【2023 B卷 100分】,附详细解题思路

🏆本文收录于,华为OD机试(JAVA)(2022&2023)

本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。

华为OD机试真题 JavaScript 实现【在字符串中找出连续最长的数字串】【2023 B卷 100分】,附详细解题思路-LMLPHP

06-08 20:30