蓝桥杯 试题 算法训练 Anagrams问题

资源限制
时间限制:1.0s 内存限制:512.0MB


问题描述

  Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的。例如,“Unclear”和“Nuclear”、“Rimon”和“MinOR”都是Anagrams。编写一个程序,输入两个单词,然后判断一下,这两个单词是否是Anagrams。每一个单词的长度不会超过80个字符,而且是大小写无关的。


输入格式

输入有两行,分别为两个单词。


输出格式

输出只有一个字母Y或N,分别表示Yes和No。


样例输入

Unclear
Nuclear


样例输出

Y


方法一、

#include<iostream>
#include<string>
#include<cctype>
using namespace std;

int main(){
    string s1,s2;
    cin>>s1>>s2;
    if(s1.length()!=s2.length()) {
        cout<<'N'<<endl;
        return 0;
    }
    int f[26]={0};
    for(int i=0;i<s1.size();i++) { //判断两个单词包含的26个英文字母(不区分大小写)的数量是否相同 
        f[tolower(s1[i])-'a']++;
        f[tolower(s2[i])-'a']--;
    }
    for(int i=0;i<26;i++)
        if(f[i]!=0) {
            cout<<'N'<<endl;
            return 0;
        }
    cout<<'Y'<<endl;
    return 0;
}

方法二、

#include<iostream>
#include<algorithm> 
#include<string>
#include<cctype>
using namespace std;

string f(string &s)
{
    string ans=s;
    for(int i=0;i<ans.length();i++)
        ans[i]=tolower(ans[i]);
    sort(ans.begin(),ans.end()); 
    return ans;
}

int main()
{
    string s1,s2; 
    cin>>s1>>s2;
    if(s1.length()!=s2.length())
        cout<<'N'<<endl;
    if(f(s1)==f(s2)) //排序后直接比较是否相等 
        cout<<'Y'<<endl;
    else cout<<'N'<<endl;
    return 0;
}
原文地址:https://www.cnblogs.com/love-ziji/p/13419757.html