请解释字谜的代码,我无法理解计数器数组,每个值已经是 0

Posted

技术标签:

【中文标题】请解释字谜的代码,我无法理解计数器数组,每个值已经是 0【英文标题】:please explain code of anagram ,i can't understand counter array ,every value already is 0 【发布时间】:2020-10-21 16:51:30 【问题描述】:
bool isAnagram(string c, string d)
    if(c.length()!=d.length())
        return false;
    int count[256]=0;
    for(int i=0;i<c.length();i++)
        count[c[i]]++;
    
    for(int i=0;i<d.length();i++)
        count[d[i]]--;
    
    for(int i=0;i<c.length();i++)
        if(count[c[i]]!=0)
            return false;
    return true;

请解释 anagram 的代码,我看不懂计数器数组,每个值都已经是 0,所以每个索引都必须包含,它是否明智地存储 asci 值

【问题讨论】:

请将您的代码复制并粘贴到您的问题中,而不是链接图像。这使您的问题易于访问和搜索。 meta.***.com/a/285557/7733418 所以请提供minimal reproducible example。 另外,请描述您作为人类如何分辨两个单词是彼此的字谜。你怎么会发现呢?特别尝试描述一种基于计数字母的方法。 是的,它以“ASCII 方式”存储值。它计算c 中的所有字母并减去d 中所有字母的计数。如果最后一切都为零,那么这两个词就是字谜。 我想你会明白,如果你在头脑中运行代码,首先是两个字谜,然后是两个非字谜。如果您不知道该怎么做,这是练习它的绝佳机会。 【参考方案1】:

这是一个类似的问题,但这说明了计数器数组的使用:

    int makeAnagram(string a, string b) 
    vector<int> freq(26,0);

    for(int i=0;i<a.length();i++) freq[a[i] - 'a']++;
    for(int j=0;j<b.length();j++) freq[b[j] - 'a']--;

    int sum = 0;
    for(int i=0;i<26;i++) sum += abs(freq[i]);
    
    return sum;

计数器数组用于“计数”值(我将其命名为 freq 表示频率)。这里freq[0]the frequency/count of the char 'a' 相同,因为'a' - 'a' = 0。这也是处理 ascii 转换的方法,也是我的频率向量大小为 26 的原因。

【讨论】:

这段代码和OP显示的有什么区别?我得到的印象是他们非常相似。此外,OP 似乎并没有要求(不同的)解决方案,而是想要对所显示的解决方案进行解释。总而言之,我的印象是你没有回答这个问题。 我解释一下计数器数组的概念,OP问这个? 是的,您的代码按字母顺序按频率对数组进行排序,例如 a 在 0 b at1 和 c=99-97 在 3,最后对所有频率求和

以上是关于请解释字谜的代码,我无法理解计数器数组,每个值已经是 0的主要内容,如果未能解决你的问题,请参考以下文章

需要帮助来理解字谜代码的乐趣

字谜排序版本与计数字符版本

如何优化我的字谜搜索功能?

在目标 c 中找到数组内所有字谜的快速方法是啥?

精心收集的 48 个 JavaScript 代码片段,仅需 30 秒就可理解!(转载)

无法理解这个字谜问题解决方案背后的逻辑[关闭]