typedef struct charToWord {
int ch;
char* word;
UT_hash_handle hh;
}charToWord;
typedef struct wordToChar {
char* word;
int ch;
UT_hash_handle hh;
}wordToChar;
bool wordPattern(char * pattern, char * s){
charToWord* charToWordMap = NULL;
wordToChar* wordToCharMap = NULL;
char* word = NULL;
word = strtok(s, " ");
for(size_t i = 0; i < strlen(pattern); i++)
{
charToWord* charToWordEntry = NULL;
wordToChar* wordToCharEntry = NULL;
int ch = pattern[i];
if(word == NULL)
{
return false;
}
HASH_FIND_INT(charToWordMap, &ch, charToWordEntry);
HASH_FIND_STR(wordToCharMap, word, wordToCharEntry);
if(charToWordEntry && strcmp(charToWordEntry->word, word) != 0)
{
return false;
}
if(wordToCharEntry && wordToCharEntry->ch != ch)
{
return false;
}
charToWordEntry = (charToWord*)malloc(sizeof(charToWord));
charToWordEntry->ch = ch;
charToWordEntry->word = word;
wordToCharEntry = (wordToChar*)malloc(sizeof(wordToChar));
wordToCharEntry->word = word;
wordToCharEntry->ch = ch;
HASH_ADD_INT(charToWordMap, ch, charToWordEntry);
HASH_ADD_STR(wordToCharMap, word, wordToCharEntry);
word = strtok(NULL, " ");
}
if(word != NULL)
{
return false;
}
return true;
}