You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript是否有方法解决统计字符串中可组成DOGGY的次数问题?

用JavaScript统计字符串中可组成单词DOGGY的最大次数

问题需求:
给定一个仅包含大写字母的字符串,统计其中能组成单词DOGGY的最大次数。

示例:

  • 字符串'DHTHTOMMGGSDY'可组成DOGGY 1次;
  • 字符串'DXOXGGYDXOXGGY'可组成DOGGY 2次;
  • 字符串'DXOXGXY'可组成DOGGY 0次;

我的尝试:
我用扩展运算符[...string]把字符串转成数组,再用filter()筛选字符,但没法正确处理DOGGY里重复的两个G。

当前代码:

let result = [...string].filter((char) => {
    let word = char !== 'D' && char !== 'O' && char !== 'G' && char !== 'G' && char !== 'Y';
    console.log(word);
});

console.log(result);

高效解法思路

核心是统计目标字符的出现频次:DOGGY需要1个D、1个O、2个G、1个Y。能组成的次数由这几个字符的可用数量决定:

  1. 统计字符串中D、O、G、Y各自的出现次数;
  2. 计算G的可用组数(即Math.floor(G的数量 / 2));
  3. 最终次数取D、O、G的组数、Y这四个值中的最小值。

代码实现

function countDoggy(str) {
    // 初始化目标字符计数
    const counts = { D: 0, O: 0, G: 0, Y: 0 };
    // 遍历字符串统计频次
    for (const char of str) {
        if (counts.hasOwnProperty(char)) {
            counts[char]++;
        }
    }
    // 计算可组成的DOGGY次数:G需要两个才能算一组
    return Math.min(counts.D, counts.O, Math.floor(counts.G / 2), counts.Y);
}

// 测试示例
console.log(countDoggy('DHTHTOMMGGSDY')); // 输出1
console.log(countDoggy('DXOXGGYDXOXGGY')); // 输出2
console.log(countDoggy('DXOXGXY')); // 输出0

对你当前代码的问题说明

你的filter()写法逻辑错误:当前代码是筛选不属于DOGGY的字符,而且重复写char !== 'G'没有意义,根本没法统计每个字符的可用数量,自然处理不了重复G的问题。上面的解法通过统计频次的方式,能高效解决重复字符的需求,时间复杂度是O(n)(n为字符串长度),是最优的解法之一。

内容的提问来源于stack exchange,提问作者Ignacio García

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 20:35:31