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 inpattern
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;
}
};