Question
Link : 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.
Code
额,感觉是一个很常规的实现。(C++ : 0ms..这个可能是用例太少,通过用时比较少)
class Solution {
public:
bool wordPattern(string pattern, string str) {
string temp;
vector<string> slist;
stringstream ss(str);
while(ss >> temp) slist.push_back(temp);
if(slist.size() != pattern.size()) return false;
map<char, string> stable;
map<char, string>::iterator it;
map<string, bool> wtable;
map<string, bool>::iterator wit;
for(int i = 0; i < pattern.size(); i++){
it = stable.find(pattern[i]);
if(it != stable.end()){
if(slist[i].compare(it->second) != 0)
return false;
}
else{
wit = wtable.find(slist[i]);
if(wit != wtable.end())
return false;
wtable.insert(pair<string, bool>(slist[i], true));
stable.insert(pair<char, string>(pattern[i], slist[i]));
}
}
return true;
}
};