首先看pattern中字母的个数与str中单词的个数是否相等。如果不相等则直接返回0,如果相等则建立哈希映射,
每个字母对应一个不同的单词。 对于pattern和str相同位置上的单词和字母有以下判断:
1如何字母上还没有值,则与str上对应单词联系起来,进入下一位置
2如过字母上已经有值,且就是当前位置单词,此时还需做一个内部判断这个值是否已在其他键上已存在,如果有,则返回0(例如 abba, dog,dog,dog),如果没有,进入下一位置。
3如果字母上已经有值,但不是当前位置上的单词,则返回0. 代码如下:
#include<malloc.h> #include<stdio.h> #include<string.h> bool wordPattern(char * pattern, char * str){ int len1 = strlen(pattern); int len2=0; int i,j,k; i=j=k=0; char temp[200]; char * words[26]; for(i=0;i<26;i++) { words[i]=(char *)malloc(sizeof(char)*200); words[i][0]=‘\0‘; } i=0; while(str[i]!=‘\0‘) { if (str[i]==‘ ‘) len2++; i++; } len2++; if(len1!=len2) return 0; i=0; while(str[i]!=‘\0‘) { int j=0; while(str[i]!=‘ ‘&&str[i]!=‘\0‘) { temp[j++]=str[i++]; } temp[j]=‘\0‘; if(words[pattern[k]-96][0]==‘\0‘) { for(int t=0;t<26;t++) { if(strcmp(temp,words[t])==0&&t!=pattern[k]-96) return 0; } strcpy(words[pattern[k]-96],temp); } else if(strcmp(words[pattern[k]-96],temp)==0); else return 0; if(str[i]==‘\0‘) return 1; else i++; k++; } return 1; }
原文:https://www.cnblogs.com/wzmm/p/12392578.html