其实对于字母而言,思路相当于是26个字母的映射表
算法实现如下:
// isBroStr2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
const int MAX=58;
int isBroStr(char* s1,char* s2)
{
int a[MAX]={0};
int i=0,strlength=0;
if (!s1&&!s2)
{
return 1;
}
else if(!s1||!s2)
{
return 0;
}
else
{
if (strlen(s1)!=strlen(s2))
{
return 0;
}
strlength=strlen(s1);
for (;i<strlength;i++)
{
a[s1[i]-'A']++;
a[s2[i]-'A']--;
}
for (;i<MAX;i++)
{
if (a[i])
{
return 0;
}
}
return 1;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char str1[]="abcd";
char str2[]="dcbz";
if (isBroStr(str1,str2))
{
cout<<"str1 and str2 are brothers"<<endl;
}
else
{
cout<<"str1 and str2 are not brothers"<<endl;
}
system("pause");
return 0;
}
// isBroStr2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
const int MAX=58;
int isBroStr(char* s1,char* s2)
{
int a[MAX]={0};
int i=0,strlength=0;
if (!s1&&!s2)
{
return 1;
}
else if(!s1||!s2)
{
return 0;
}
else
{
if (strlen(s1)!=strlen(s2))
{
return 0;
}
strlength=strlen(s1);
for (;i<strlength;i++)
{
a[s1[i]-'A']++;
a[s2[i]-'A']--;
}
for (;i<MAX;i++)
{
if (a[i])
{
return 0;
}
}
return 1;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char str1[]="abcd";
char str2[]="dcbz";
if (isBroStr(str1,str2))
{
cout<<"str1 and str2 are brothers"<<endl;
}
else
{
cout<<"str1 and str2 are not brothers"<<endl;
}
system("pause");
return 0;
}