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

用于重分布字符使所有字符串相等的代码存在什么问题?

代码错误分析
  • 问题核心判定逻辑:由于允许任意移动字符,只要每个字符的总出现次数都可以被数组长度n整除,就能平分到所有字符串中得到相等的内容,返回true,否则返回false。
  • 你代码的核心逻辑完全错误,和正确判定规则不匹配:
    你将所有字符的出现次数存入set后判断set大小是否为1,本质是要求所有字符的出现次数完全相等,会出现两类判定错误:
    1. 本应返回true的场景被误判为false:比如n=3,字符a共出现3次、字符b共出现6次,二者都可以被3整除,应当返回true,但你的set中存在3、6两个值,大小为2,会错误返回false。
    2. 本应返回false的场景被误判为true:比如n=2,字符a共出现3次、字符b共出现3次,二者都不能被2整除,应当返回false,但你的set中只有3一个值,大小为1,会错误返回true。
  • 你标注的循环部分没有问题,功能是正确统计所有字符的总出现次数,无需修改。
修正后的代码示例
bool makeEqual(vector<string>& words)
{ 
    int n = words.size();
    int cnt[26] = {0};
    
    for(int i = 0; i < n; i++)
    {    
        for(char c : words[i])
        {
            cnt[c - 'a']++;
        }
     }

     for(int i = 0; i < 26; i++)
     {
         if(cnt[i] % n != 0)
         {
             return false;
         }
     }
     return true;
}

如果字符范围不止小写英文字母,你可以保留原来的map实现,只需要将后续的set判定逻辑替换为遍历map,判断每个字符的计数是否能被n整除即可。

内容的提问来源于stack exchange,提问作者ankit sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:54:06