题目描述
给定两个字符串str1和str2,如果str1和str2中出现的字符种类出现的一样且每种字符出现的次数也一样,那么str1和str2互为变形词。请判断str1和str2是否为变形词。
输入描述:
输入包括3行,第一行包含两个整数n,m(1 \leq n,m\leq 10^5)(1≤n,m≤10^5)分别代表str1和str2的长度,第二行和第三行为两个字符串,分别代表str1和str2。
输出描述:
如果str1和str2互为变形词,请输出“true”,否则输出“false”。
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str1;
string str2;
int arr[256] = {0}; //用长度为256的数组作为字典,每一个元素对应一个字符的ASCII码
int n=0,m=0; //n,m分别表示输入字符串的长度
cin >> n >> m;
if(n != m)
{
cout << "false" <<endl;
return 0;
}
cin >> str1 >> str2;
for(int i = 0; i < n; i++)
{
arr[str1[i]]++;
}
for(int i = 0; i < m; i++)
{
if(arr[str2[i]]-- == 0)
{
cout << "false" << endl;
return 0;
}
}
cout << "true" << endl;
return 0;
}
如果字符的种类为M,字符长度为N,则时间复杂度为O(N),空间复杂度为O(M)