使用 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'
广告