您的位置:首页 > 其它

LeetCode 290. Word Pattern

2016-03-05 21:05 225 查看
不符合的情况有三种:1、pattern和str长度不符 2、pattern中不同字母指向str中同一词(a、b->同一词) 3、同一字母指向不同词(a->不同词)

class Solution {
public:
vector<string> split(string str){
vector<string> res;
string tmp = "";
for(int i = 0; i < str.length(); ++i){
if(str[i] != ' ') {
if(i == str.length() - 1) res.push_back(tmp + str[i]);
tmp += str[i];
}
else{
res.push_back(tmp);
tmp = "";
}
}
return res;
}
bool wordPattern(string pattern, string str) {
vector<string> res = split(str);

if(pattern.length() != res.size()) return false;
map<char, string> corre;
map<char, string>::iterator it;
set<string> word;
set<string>::iterator itr;
for(int i = 0; i < pattern.length(); ++i){
it = corre.find(pattern[i]);
if(it == corre.end()){
itr = word.find(res[i]);
if(itr != word.end()) return false;
corre.insert(pair<char, string>(pattern[i], res[i]));
word.insert(res[i]);
}
else{
if(it->second != res[i]) return false;
}
}
return true;
}
};


map存字母和单词的对应关系,set存出现过的单词。

if(it == corre.end()) 即该字母未出现过,如果对应的单词已出现,则代表多字母对应同一词,return false.
else               该字母出现过,如果之前出现过的同一字母对应的却是不同的单词,return false.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: