如果两个字符串的字符一样,但是顺序不一样,被认为是兄弟字符串,比如bad和adb即为兄弟字符串,现提供一个字符串,如何在字典中迅速找到它的兄弟字符串,
请描述数据结构和查询过程。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
*截取字符串
*/
char* subString(char *src, int pos, int len) {
char *p = src;
char *substr = calloc(sizeof(char), len + 1);
int i = 0;
p += pos;
while (len--) {
substr[i++] = *(p++);
}
substr[i] = '\0';
return substr;
}
int getHash(char *p) {
int hash = 0;
int length = strlen(p);
int i = 0;
for (; i < length; i++) {
hash |= (1 << (p[i] - 'A'));
}
return hash;
}
void sibilingString(char* dict, char* target) {
int size = strlen(dict);
int start = 0;
int len = strlen(target);
int end = len - 1;
int targetHash = getHash(target);
while (end++ < size) {
char *subStr = subString(dict, start++, len);
/*若为兄弟字符串则求的Hash一致*/
if (getHash(subStr) == targetHash) {
puts(subStr);
}
}
}
int main(void) {
char *src = "WorldHello";
puts("sibiling strings:");
sibilingString(src, "Heoll");
return EXIT_SUCCESS;
}