确定某物是不是是字谜的功能问题[关闭]

Posted

技术标签:

【中文标题】确定某物是不是是字谜的功能问题[关闭]【英文标题】:Trouble with function to determine if something is an anagram [closed]确定某物是否是字谜的功能问题[关闭] 【发布时间】:2021-04-16 01:33:08 【问题描述】:

我只是在处理一些关于代码战的挑战。这个特别是关于编写一个函数来确定两个单词是否是字谜 - 这意味着它们包含相同的字母,可能只是乱序。

我对 C++ 很陌生,所以我可能忽略了一些非常基本的东西。这是我编写的代码,当我运行它时,主要使用两个字符串“orang”和“apple”测试 anagram 函数,程序输出 1(true),这意味着它说这两个词不是 anagrams。如果我尝试“橙色”和“苹果”,它会输出正确的 0(false)。基本上,它只是根据单词的长度而不是它们的单个字母数进行比较。

这是我的代码:

#include <iostream> 
#include <bits/stdc++.h>

using namespace std; 

bool isAnagram(std::string test, std::string original)
  //your code here
  map<char, int> freqTest;
  map<char, int> freqOrig;
  for(int i = 0; i < test.length(); i++) 
      char c = tolower(test[i]);
      freqTest[c]++;
  
  for(int i = 0; i < original.length(); i++) 
      char c = tolower(test[i]);
      freqOrig[c]++;
  
  
  return freqTest == freqOrig;



// Main function 
int main() 
 
    string str1 = "orang";
    string str2 = "apple";
    cout<<isAnagram(str1, str2)<<endl;


【问题讨论】:

你打错了:你可以通过创建一个函数来创建频率图来分解你的代码,return compute_frequency(test) == compute_frequency(original); 问题可能比你使用test 两次更容易发现。 【参考方案1】:

非常简单的错误:

for(int i = 0; i < original.length(); i++) 
      char c = tolower(test[i]); //  Should be original[i] instead of test[i]
      freqOrig[c]++;
  

tolower(test[i]) 更改为tolower(original[i])

【讨论】:

谢谢!我不敢相信我没有注意到这一点。 @Ricky 如果你打印了地图,你会的;)【参考方案2】:

你正在使用太多的力量来解决一个简单的问题。您可以只使用一个映射,添加一个字符串并减去另一个字符串,然后检查映射中的任何值是否不同于 0。

您也可以将字符串替换为小写,排序然后比较。

#include <algorithm>

for(int i = 0; i < test.size(); i++)
    test[i] = tolower(test[i]);
for(int i = 0; i < original.size(); i++)
    original[i] = tolower(original[i]);
sort(test.begin(), test.end());
sort(original.begin(), original.end());
return test == original;

【讨论】:

“使用不同的算法”有点超出这个问题的范围,imo,特别是因为完全有可能修复提问者方法的实现。 我不明白为什么这会快得多。时间复杂度是一样的。 @klutt:在减法期间,如果任何条目变为负数,您就有可能提前退出。如果你这样做,你甚至不必在最后检查非零的地图,因为有两个长度相等的输入,这是一个零和游戏,如果任何条目最终为正,那么必须有至少有一个相应的导致提前退出的负面进入。当然,我假设您首先比较长度,以便真正轻松地提前退出。 @NathanPierson 我说他可以只用一张地图,同样的算法。然后我提出了一个更简单的方法来实现他想要的 @klutt 时间复杂度基本相同,我知道。代码的空间和大小/简单性如何?

以上是关于确定某物是不是是字谜的功能问题[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

确定两个单词是不是是字谜

代码背后的逻辑确定两个 javascript 字符串是不是是字谜

遇到问题如何使用 if 语句来确定某物是不是在列表中。 Python [重复]

确定一个列表是不是由 Java 8 中的字谜元素组成

是两个字谜吗? [关闭]

查找 N 个字符串是不是是彼此的字谜