Given a pattern
and a string str
, find if str
follows the same pattern.
Here follow means a full match, such that there is a bijection between a letter in pattern
and a substring in str
.
Examples:
- pattern =
"abba"
, str ="dog cat cat dog"
should return true. - pattern =
"abba"
, str ="dog cat cat fish"
should return false. - pattern =
"aaaa"
, str ="dog cat cat dog"
should return false. - pattern =
"abba"
, str ="dog dog dog dog"
should return false.
Notes:
You may assume pattern
contains only lowercase letters, and str
contains lowercase letters separated by a single space.
类似于模式匹配。题目应该算比较简单的。
没做出来。前期一直在指针数组折腾,后来才知道其实完全可以用C99定义的变长数组(一是对LeetCode的检测环境不熟,二是用渣渣VS2008用多了,MS这货直到VS2013才部分支持C99)。贴上代码:(VC6.0 VS2008 2010都不能通过,13未试,CLang和GCC可以)
{
int i, j, len = strlen(pattern);
int search[len];
char *token, *saveptr; char strtmp[strlen(str)];
for(i = 0; i < len; i++) search[i] = -1;
token = strtok_r(strtmp, " ", &saveptr);
for(i = 0; i < len; i++)
{
int a = strchr(pattern, pattern[i]) - pattern;
int b = strstr(str, token) - str;
if(search[j] == b) return false;
if(search[a] == -1) search[a] = b;
else if(search[a]!= b) return false;
token = strtok_r(NULL, " ", &saveptr);
}
if((token == NULL) ^ (i== len)) return false;
}