使用 C++ 检查两个字符串是否互为字谜


假设我们有两个给定的字符串 'a' 和 'b'。我们需要检查这两个字符串是否互为字谜。如果一个字符串包含与另一个字符串相同的字符,则称这两个字符串互为字谜。

例如

输入 1

a= anagram
b= gnarama

输出

True

解释 − 字符串 'gnarama' 与字符串 'anagram' 包含相同的字符。因此我们返回 True。

输入 2

a= programmer
b= mprogretmrqp

输出

False

解释 − 字符串 'b' 的字符比字符串 'a' 多,因此我们可以说字符串的长度不同。因此我们返回 False。

下面程序中用于解决此问题的方法如下:

对于给定的两个字符串,我们获取字符串的长度,如果字符串的长度不同,我们将返回 False。否则,如果字符串的长度相同,我们将检查该字符串的每个字符是否与另一个字符串的字符匹配,并返回 True,否则返回 False。

  • 输入两个字符串 'a' 和 'b'

  • 布尔函数 checkAnagram(string a, string b) 获取两个字符串 'a' 和 'b',并返回它们是否互为字谜。

  • 查找字符串 'a' 和 'b' 的长度,并检查它们是否相等。如果不相等,则返回 false。

  • 使用 C++ STL(标准模板库)map 函数,通过迭代字符串 'a' 来创建每个字符的哈希表。

  • 在创建字符串 'a' 的每个字符的映射时,删除字符串 'b' 中存在的那些字符。

  • 然后迭代映射并检查哈希表中是否还有任何字符,如果存在则返回 False,否则返回 True。

示例

 在线演示

#include<bits/stdc++.h>
using namespace std;
bool checkAnagram(string a, string b){
   int len1= a.length();
   int len2= b.length();
   if(len1!= len2) {
      return false;
   }
   unordered_map <char,int> mp;
   for(int i=0;i<a.size();i++) {
      mp[a[i]]++;
      mp[b[i]]--;
   }
   for(auto it:mp){
      if(it.second) return false;
   }
   return true;
}
int main(){
   string a= "anagram";
   string b= "gnarama";
   cout<< checkAnagram(a,b)<<endl;
   return 0;
}

输出

如果我们运行上述代码,它将打印输出为:

1

由于两个输入字符串互为字谜,因此它返回 True,即 '1'

更新于:2021年2月5日

2K+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告