#include <iostream>
#include <assert.h>
using namespace std;
bool strSameHist(const char *str1, const char *str2)
{
assert(str1 != NULL && str2 != NULL);
unsigned int m=strlen(str1);
unsigned int n=strlen(str2);
if (m!=n)
{
return false;
}
unsigned int i;
unsigned int anCount[256];
memset(anCount, 0, sizeof(unsigned int) *256 );
for (i=0; i<m; i++)
{
anCount[(unsigned char)str1[i]]++;
}
for (i=0; i<m; i++)
{
if (anCount[(unsigned char)str2[i]] == 0)
{
return false;
}
else
{
anCount[(unsigned char)str2[i]]--;
}
}
return true;
}
int main()
{
char str1 []= "ABBAcdffkl";
char str2[]= "AABBlkffcd";
char str3[]= "AABBlkdfcd";
cout<<str1<< (strSameHist(str1,str2)? " is SAME with ":" is DIFFERENT with ") <<str2<<endl;
cout<<str1<< (strSameHist(str1,str3)? " is SAME with ":" is DIFFERENT with ") <<str3<<endl;
cout<<str2<< (strSameHist(str2,str3)? " is SAME with ":" is DIFFERENT with ") <<str3<<endl;
return 0;
}