您的位置:首页 > 其它

Word Pattern

2016-01-20 22:29 260 查看
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
non-empty word 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.

class Solution {
public:
bool wordPattern(string pattern, string str) {
int m = pattern.length();
int n = str.length();

int i = 0;
int p = 0;
int q = 0;
map<char, string> table1;
map<string, char> table2;

while (i < m && p < n)
{
while (p < n && str[p] != ' ')
{
p++;
}
int len = p - q;
string temp = str.substr(q, len);
if (table1.find(pattern[i]) != table1.end())
{
if (table1[pattern[i]] != temp)
{
return false;
}
}
if (table2.find(temp) != table2.end())
{
if (table2[temp] != pattern[i])
{
return false;
}
}
table1[pattern[i]] = temp;
table2[temp] = pattern[i];

p++;
q = p;
i++;
}

if (i != m || p != n+1)
{
return false;
}

return true;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: