判断两个字符串是否互为变形词
一、题目
给定两个字符串 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; }
|