文章目录
一、题目
Given a pattern and a string s, find if s 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 s.
Example 1:
Input: pattern = "abba", s = "dog cat cat dog"
Output: true
Example 2:
Input: pattern = "abba", s = "dog cat cat fish"
Output: false
Example 3:
Input: pattern = "aaaa", s = "dog cat cat dog"
Output: false
Constraints:
1 <= pattern.length <= 300
pattern contains only lower-case English letters.
1 <= s.length <= 3000
s contains only lowercase English letters and spaces ' '.
s does not contain any leading or trailing spaces.
All the words in s are separated by a single space.
二、题解
判断一一对应:用两个哈希表
cpp
class Solution {
public:
bool wordPattern(string pattern, string s) {
unordered_map<char,string> map1;
unordered_map<string,char> map2;
istringstream iss(s);
vector<string> tmp;
string str;
while(iss >> str) tmp.push_back(str);
if(tmp.size() != pattern.size()) return false;
for(int i = 0;i < pattern.size();i++){
if(map1.find(pattern[i]) == map1.end()) map1[pattern[i]] = tmp[i];
else{
if(map1[pattern[i]] != tmp[i]) return false;
}
if(map2.find(tmp[i]) == map2.end()) map2[tmp[i]] = pattern[i];
else {
if(map2[tmp[i]] != pattern[i]) return false;
}
}
return true;
}
};