题目链接:https://leetcode.com/problems/word-pattern/
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)
{
vector<string> dic;
istringstream sin(str);
string tmp;
while(sin>>tmp)
dic.push_back(tmp);
if(dic.size()!=pattern.size())
return false;
unordered_map<char, string>mp1;
unordered_map<string, char>mp2;
for(int i=0;i<pattern.size();i++)
{
if(mp1.find(pattern[i])==mp1.end())
mp1[pattern[i]]=dic[i];
else if(mp1[pattern[i]]!=dic[i])
return false;
if(mp2.find(dic[i])==mp2.end())
mp2[dic[i]]=pattern[i];
else if(mp2[dic[i]]!=pattern[i])
return false;
}
return true;
}
};