其实对于字母而言,思路相当于是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;
}
本文介绍了一种用于判断两个字符串是否为“兄弟字符串”的算法实现。该算法通过构建一个映射表来记录每个字母出现的次数差异,进而判断两个字符串是否包含相同数量的不同字母。此方法适用于全大写字母组成的字符串,并且长度相等的情况。
309

被折叠的 条评论
为什么被折叠?



