如何在迅速匹配兄弟字符串(如,bad和adb就是兄弟字符串),目前只针对字母

来源:互联网 发布:八仙乐园粉尘爆炸知乎 编辑:程序博客网 时间:2024/05/02 02:57

其实对于字母而言,思路相当于是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;}


 

 

原创粉丝点击