华为OD机试真题 JavaScript 实现【获取字符串中连续出现次数第k多的字母的次数】【2023Q1 100分】,附详细解题思路

在这里插入图片描述

一、题目描述

给定一个字符串,只包含大写字母,求在包含同一字母的子串中,长度第 k 长的子串的长度,相同字母只取最长的那个子串。

二、输入描述

  1. 第一行有一个子串(1<长度<=100),只包含大写字母;
  2. 第二行为 k的值;

三、输出描述

输出连续出现次数第k多的字母的次数。

四、解题思路

  1. 读取输入的字符串和 k 值;
  2. 使用 HashMap 统计每个字符连续出现的次数;
  3. 遍历字符数组,记录当前字符和连续出现次数;
  4. 更新字符的最大连续出现次数;
  5. 将字符和最大连续出现次数存储在 HashMap 中;
  6. 将 HashMap 转换为 List,并按照值的降序进行排序;
  7. 判断 k 是否超过了 List 的长度,如果超过则输出 -1,否则输出第 k 个元素的值;
  8. 输出最终结果。

五、JavaScript算法源码

function findK(s, k) {
    // 使用 HashMap 统计每个字符连续出现的次数
    const map = new Map();
    let current = s[0];
    let count = 0;

    // 遍历字符数组,记录当前字符和连续出现次数
    for (let i = 0; i < s.length; i++) {
        const temp = s[i];
        if (temp === current) {
            // 更新字符的最大连续出现次数
            count++;
        } else {
            // 重置统计参数
            current = temp;
            count = 1;
        }

        // 将字符和最大连续出现次数存储在 HashMap 中
        if (map.has(current)) {
            map.set(current, Math.max(map.get(current), count));
        } else {
            map.set(current, count);
        }
    }

    // 将 HashMap 转换为 List,并按照值的降序进行排序
    const sortedEntries = [...map.entries()].sort((a, b) => b[1] - a[1]);

    // 判断 k 是否超过了 List 的长度
    if (k > sortedEntries.length) {
        return -1;
    } else {
        return sortedEntries[k - 1][1];
    }
}

六、效果展示

1、输入

qqwwweeeerrrrrtttttt
3

2、输出

第三长的字符的个数,很明显就是eeee,4。

3、说明

同一字母连续出现的最多的是t,6次;第二多的还是r,5次,第三多的就是e,一共4个e,所以输出4。

华为OD机试真题 JavaScript 实现【获取字符串中连续出现次数第k多的字母的次数】【2023Q1 100分】,附详细解题思路_第1张图片


下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路

本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)

每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

你可能感兴趣的:(javascript,算法,学习,华为)