链接:https://www.nowcoder.com/questionTerminal/b07c464a107e421ebbd2c82aebd42e39
来源:牛客网
给定两个字符串str1和str2,如果str1和str2中出现的字符种类出现的一样且每种字符出现的次数也一样,那么str1和str2互为变形词。请判断str1和str2是否为变形词。
输入描述:
输入包括3行,第一行包含两个整数n,m(1≤n,m≤105)(1 \leq n,m\leq 10^5)(1≤n,m≤105)分别代表str1和str2的长度,第二行和第三行为两个字符串,分别代表str1和str2。
输出描述:
如果str1和str2互为变形词,请输出“true”,否则输出“false”。
示例1
输入
3 3
123
321
输出
true
示例2
输入
3 4
123
2331
输出
false
备注:
时间复杂度O(n)O(n)O(n),空间复杂度O(n)O(n)O(n)。
思路:利用map记录每个单词出现的次数,如果每个单词出现的次数相同,则true,否则false。
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main()
{
int n,m;
cin >> n >> m;
if(n!=m)
{
cout<<"false"<<endl;
return 0;
}
string s1,s2;
cin >> s1 >> s2;
map<char,int> sm1,sm2;
for(int i = 0;i < n;i++)
{
sm1[s1[i]]++;
sm2[s2[i]]++;
}
for(int i = 0;i < n;i++)
if(sm1[i] != sm2[i])
{
cout << "false" << endl;
return 0;
}
cout << "true" << endl;
return 0;
}