蓝桥杯算法训练—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; 
} 

猜你喜欢

转载自blog.csdn.net/brilliantZC/article/details/86551471