试题 算法训练 Anagrams问题


资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
  Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的。例如,“Unclear”和“Nuclear”、“Rimon”和“MinOR”都是Anagrams。编写一个程序,输入两个单词,然后判断一下,这两个单词是否是Anagrams。每一个单词的长度不会超过80个字符,而且是大小写无关的。
  输入格式:输入有两行,分别为两个单词。
  输出格式:输出只有一个字母Y或N,分别表示Yes和No。
  输入输出样例
样例输入
Unclear
Nuclear
样例输出
Y

最开始的想法是两个字符串的字符逐一进行比较,个人实现起来却。。。
借鉴了一下大佬的想法,可以先对字符串进行操作,这样比较起来就是十分地方便了。

//Anagrams问题
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;

int main(){
string a,b;
cin>>a>>b;
if(a.length()!=b.length()){
cout<<"N";
return 0;
}
int i=0;
//将字符串全部转换为小写
transform(a.begin(),a.end(),a.begin(),::tolower);
transform(b.begin(),b.end(),b.begin(),::tolower);
//重新排序
sort(a.begin(),a.end());
sort(b.begin(),b.end());
while(i<a.length()){
if(a[i]!=b[i]){
cout<<"N";
return 0;
}
i++;
}
cout<<"Y";
return 0;
}