蓝桥杯算法训练—Anagrams问题
这题就是比较两个单词中每一个字母出现的次数(忽略大小写)。我的想法是:首先比较两个单词长度是否相等,若不相等就一定是“N”,若相等就统计第一个单词和第二个单词的字母出现的次数,这里我是用了两个数组计数,先将两个数组赋初值0,然后取出从前往后取出单词每一个字母,若是大写字母就%65,若是小写字母就%97,取模后的值就在0~26之间,然后在统计数组相应位置进行加1操作(这里将计数数组可以理解为:a[0]存储的值为字母a出现的次数,a[1]存储的值为字母b出现的次数…a[25]存储的值为字母z出现的次数)。最后在比较两个计数数组是否一样,若一样则是“Y”,不一样就是“N”.
代码如下:
#include<string.h>
#include<iostream>
using namespace std;
int main()
{
char ch1[80],ch2[80];
int a[26],b[26],alength,blength,atemp,btemp,flag=0;
gets(ch1);
gets(ch2);
alength=strlen(ch1);
blength=strlen(ch2);
for(int i=0;i<26;i++){
a[i]=0;
b[i]=0;
}
if(alength!=blength)
{
cout<<"N";
}
else
{
for(int j=0;j<alength;j++){
if(ch1[j]>='a'&&ch1[j]<='z'){
atemp=ch1[j]%97;
a[atemp]=a[atemp]+1;
}
else if(ch1[j]>='A'&&ch1[j]<='Z'){
atemp=ch1[j]%65;
a[atemp]=a[atemp]+1;
}
}
for(int k=0;k<blength;k++){
if(ch2[k]>='A'&&ch2[k]<='Z'){
btemp=ch2[k]%65;
b[btemp]=b[btemp]+1;
}
else if(ch2[k]>='a'&&ch2[k]<='z'){
btemp=ch2[k]%97;
b[btemp]=b[btemp]+1;
}
}
for(int x=0;x<26;x++){
if(a[x]!=b[x]){
flag=1;
break;
}
}
if(flag==0)
{
cout<<"Y";
}
else
{
cout<<"N";
}
}
return 0;
}