使用 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'
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP