题目描述
给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。这里规定大小写为不同字符,且考虑字符串重点空格。
给定一个string stringA和一个string stringB,请返回一个bool,代表两串是否重新排列后可相同。保证两串的长度都小于等于5000。
测试样例:
“This is nowcoder”,”is This nowcoder”
返回:true
“Here you are”,”Are you here”
返回:false
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
bool IsSample(char *str1,char *str2)
{
if (strlen(str1) != strlen(str2))return false;
int strdata1[256] = {0};
int strdata2[256] = {0};
char *p = str1;
char buff[32] = {0};
while (*p != ‘\0‘)
{
strdata1[*p]++;
buff[*p >> 3] |= (0x1 << (*p & 0x7));
//此处可以用bitset来实现,判断字符的存在性。
p++;
}
p = str2;
while (*p != ‘\0‘)
strdata2[*p++]++;
/////////////////////////////////
//开始判断。
int i = 0;
for (i = 0; i < 32; i++)
{
for (int j = 0; j < 8; j++)
{
if ((buff[i] & (0x1 << j)) !=0)
{
if (strdata1[i * 8 + j] == strdata2[i * 8 + j])
{
continue;
}
else return false;
}
}
}
if (i == 32)return true;
}
int main()
{
char s1[] = "eeebbb";
char s2[] = "eeb0bb";
cout << IsSample(s1, s2) << endl;
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-09 08:07:08