ALGO-188 VIP试题 P0504 Anagrams问题

和 ALGO-91 Anagrams问题 是相同的两个题,只是输出不同。。。
ALGO-188	VIP试题 P0504	Anagrams问题
我的做法如下:

#include<iostream>
#include<algorithm>
#include<string>
#include<cstdio>
#include<cstring>
#include<cctype>

using namespace std;

int main()
{
	char a[81];
	char b[81];
	scanf("%s",a);
	scanf("%s",b);
	int lena = strlen(a);
	int lenb = strlen(b);
	
	if( lena != lenb )
	{
		printf("no\n");
		return 0;
	}
		 
	for(int i=0;i<lena;i++)
		a[i] = tolower(a[i]);
	
	for(int i=0;i<lenb;i++)
		b[i] = tolower(b[i]);
		
	sort(a,a+lena);
	sort(b,b+lenb);
	
	if(strcmp(a,b)==0)
		printf("yes\n");
	else
		printf("no\n");
	
	return 0;
} 

感觉自己的做法有些不妥,又找了大佬们的两个思路:

1、这里由于字母只有26个,不区分大小写,因此可以定义两个辅助的数组,用来存26个字母出现的个数。然后两个数组进行比较。
思路:
  如果两个字符串本身长度都不一致,肯定不会是Anagrams。
  如果两个数组相同下标下的值不同,肯定不会是Anagrams。
  当且仅当两个字符串长度一致,辅助数组相同下标下的值相同时,才满足Anagrams。

—> strlwr()用于将字符串中的字符转换为小写 <—

#include<iostream>
#include<algorithm>
#include<string>
#include<cstdio>
#include<cstring>
#include<cctype>

using namespace std;

int main()
{
	char a[81],b[81];
	int counta[26]={0},countb[26]={0};
	scanf("%s",a);
	scanf("%s",b);
	int lena = strlen(a);
	int lenb = strlen(b);
	
	if( lena != lenb )
	{
		printf("no\n");
		return 0;	//若不相等直接结束程序,否则继续 
	}
	strlwr(a);
	strlwr(b);
	for(int i=0;i<lena;i++)
	{
		counta[a[i]-'a']++;
		countb[b[i]-'a']++;
	}
	
	for(int i=0;i<26;i++)
		if(counta[i] != countb[i])
		{
			printf("no\n");
			return 0;
		}
		
	printf("yes\n");

	return 0;
} 

2、先把单词转化为小写(大写也可以),将每个单词的字母相加、相乘。比较相加、相乘的结果是否全部相同,若是,Y,否则,N。

#include<iostream>
#include<algorithm>
#include<string>
#include<cstdio>
#include<cstring>
#include<cctype>

using namespace std;

int main()
{
	char a[81],b[81];
	scanf("%s",a);
	scanf("%s",b);
	int lena = strlen(a);
	int lenb = strlen(b);
	
	if( lena != lenb )
	{
		printf("no\n");
		return 0;	//若不相等直接结束程序,否则就继续 
	}
	
	strlwr(a);
	strlwr(b);
	
	int sum1=0,sum2=0;
	int mult1=1,mult2=1;
	for(int i=0;i<lena;i++)
	{
		sum1=(sum1+a[i])%100000;
		sum2=(sum2+b[i])%100000;
		mult1=(mult1*a[i])%1000000;
		mult2=(mult2*b[i])%1000000;
	}
	
	if(sum1==sum2&&mult1==mult2)
		printf("yes\n");
	else
		printf("no\n");
	
	return 0;
}