判断两个字符串是否互为变形词

判断两个字符串是否互为变形词

一、题目

给定两个字符串 str1 和 str2,如果 str1 和 str2 中出现的字符种类一样且每种字符出现的次数也一样,那么 str1 和 str2 互为变形词。请实现函数判断两个字符串是否互为变形词

比如:

1
2
str1 = "123", str2 = "231" 返回 true
str1 = "123", str2 = "2331" 返回 false

二、思路

这道题目简单,首先判断两个字符串长度是否相等,如果不等,直接返回 false。然后用一个 map,key 为字符,value 为出现的次数,先遍历 str1,然后遇到 key,就给 value 自增。接下来,遍历 str2,遇到 key 就给 value 减减。

两个字符串都遍历完,在判断 map 中是否存在 value 不为 0 的key。存在即返回 false

三、代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <string>
#include <iostream>
#include <unordered_map>

class Solution {
public:
bool is_deformation(const std::string& str1, const std::string& str2) {
std::unordered_map<char, int> mp;
for (const auto& x : str1) {
mp[x]++;
}
for (const auto& x : str2) {
mp[x]--;
}
for (const auto& x : mp) {
if (x.second != 0) {
return false;
}
}
return true;
}
};

int main() {
Solution s;
std::string str1 = "123";
std::string str2 = "2331";
bool res = s.is_deformation(str1, str2);
std::cout << res << std::endl;
return 0;
}