请解释字谜的代码,我无法理解计数器数组,每个值已经是 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的主要内容,如果未能解决你的问题,请参考以下文章