給定一種pattern(模式)
和乙個字串str
,判斷str
是否遵循相同的模式。
這裡的遵循指完全匹配,例如,pattern
裡的每個字母和字串str
中的每個非空單詞之間存在著雙向連線的對應模式。
示例1:
輸入:pattern =示例 2:"abba"
, str ="dog cat cat dog"
輸出:true
輸入:pattern =示例 3:"abba"
, str ="dog cat cat fish"
輸出:false
輸入:pattern =示例 4:"aaaa"
, str ="dog cat cat dog"
輸出:false
輸入:pattern =說明:你可以假設"abba"
, str ="dog dog dog dog"
輸出:false
pattern
只包含小寫字母,str
包含了由單個空格分隔的小寫字母。
提供兩個思路吧
第乙個思路最簡單就是用字串雜湊,用pattern的每乙個位置的字幕。作為雜湊表的key,然後將str的單詞作為value打進去雜湊表
這個思路最簡單了
第二個思路:我直接就是上去模擬,首先先把pattern的長度和str的空格數+1做乙個比較,如果不想當就直接return false;
用乙個結構體記錄一對一的結果:
1結構體然後在把遍歷一遍patter,因為題目只要求小寫字母,所以每個a[i]對對應乙個字母,把他對於的單詞拷貝到hastruct
node
2 a[200];
每次拷貝前先跑一遍是否出現重複,如果出現重複就return false;
最後再看一遍i,j是否跑到了len1,len2-1
大體思路就是這樣子,具體看我**
1wordpatternbool wordpattern(char* pattern, char*str)221
else
2226
for(i=0; i)
2740
if(str[j]=='')
4146}47
//printf("%d\n",flag1);
48for(j=0; j)
49 tem[top++]=str[j];
50if(flag1==len2-1
)51 tem[top++]=str[flag1];
52 strcpy(a[(int
)pattern[i]].ha,tem);
5354
//printf("[%s]",a[(int)pattern[i]].ha);55}
56else
if(flag1!=-1&&flag2==-1)57
68if(str[j]=='')
6973}74
for(int j=flag1+1; j)
75 tem[top++]=str[j];
7677
if(flag2==len2-1
)78 tem[top++]=str[flag2];
7980
if(pattern[i]==pattern[i-1
])81
85///
printf("[[[%s",tem);
86for(int k=96; k<=122; k++)
8795 strcpy(a[(int
)pattern[i]].ha,tem);
969798}
99else
100115
if(str[j]=='')
116120
121}
122for(int j=flag1+1; j)
123 tem[top++]=str[j];
124125
if(flag2==len2-1
)126 tem[top++]=str[flag2];
127128
if(a[(int)pattern[i]].ha[0]!=-1
)129
}\n",a[(int)pattern[i]].ha);
131//
printf("%s\n",tem);
132if(strcmp(a[(int)pattern[i]].ha,tem)!=0
)133
return
false
;134
}135
else
136147
}148 strcpy(a[(int
)pattern[i]].ha,tem);
149}
150151
}152
else
153\n",flag1,flag2);
155if(flag1==len2-1||flag2==len2-1
)156
return
true
;157 top=0
;158
for(int j=flag2+1; j<=len2; j++)
159164
if(str[j]=='')
165169
}170
for(int j=flag2+1; j)
171 tem[top++]=str[j];
172173
if(flag1==len2-1
)174 tem[top++]=str[flag1];
175176
if(a[(int)pattern[i]].ha[0]!=-1
)177
\n",tem);
180if(strcmp(a[(int)pattern[i]].ha,tem)!=0
)181
return
false
;182
}183
else
184194
}195 strcpy(a[(int
)pattern[i]].ha,tem);
196}
197198
}199
}200
}201
202if(i!=len1)
203return
false
;204
205 printf("
111"
);206
if(flag1>flag2)
207 else
214215
return
true
;216 }
Leetcode 290 單詞模式
給定一種pattern 模式 和乙個字串str,判斷str是否遵循相同的模式。這裡的遵循指完全匹配,例如,pattern裡的每個字母和字串str中的每個非空單詞之間存在著雙向連線的對應模式。示例1 輸入 pattern abba str dog cat cat dog 輸出 true示例 2 輸入 ...
LeetCode 290 單詞模式
給定一種pattern 模式 和乙個字串str,判斷str是否遵循相同的模式。這裡的遵循指完全匹配,例如,pattern裡的每個字母和字串str中的每個非空單詞之間存在著雙向連線的對應模式。示例1 輸入 pattern abba str dog cat cat dog 輸出 true示例 2 輸入 ...
LeetCode290 單詞模式
給定一種 pattern 模式 和乙個字串 str 判斷 str 是否遵循相同的模式。這裡的遵循指完全匹配,例如,pattern 裡的每個字母和字串 str 中的每個非空單詞之間存在著雙向連線的對應模式。示例1 輸入 pattern abba str dog cat cat dog 輸出 true ...