您的位置:首页 > 编程语言 > C语言/C++

Leetcode NO.290 Word Pattern

2015-10-08 04:50 281 查看
本题题目要求如下:

Given a 
pattern
 and a string 
str
,
find if 
str
 follows the same pattern.

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:

pattern
contains only lowercase alphabetical letters, and 
str
 contains
words separated by a single space. Each word in 
str
 contains only lowercase alphabetical
letters.
Both 
pattern
 and 
str
 do
not have leading or trailing spaces.
Each letter in 
pattern
 must map to a word with length that is at least 1.

本题应该算是easy中的easy了,思路相当直接,就是用hashmap,当然需要注意一点就是不光要避免'a'->"dog"和'a'->"cat"这种冲突,还要解决'a'->"dog"和'b'->dog这种冲突。。我的解决方法是加一个hashset,也许有更好地,但是这么做也行。。
代码如下:

class Solution {
public:
bool wordPattern(string pattern, string str) {
istringstream is(str);
unordered_map<char, string> hashmap;
unordered_set<string> hashset;
string word;
int sz = pattern.length();
int i = 0;
while (is >> word) {
hashset.insert(word);
if (i == sz) {
return false;
}
char tmp_val = pattern[i++];
auto found = hashmap.find(tmp_val);
if (found == hashmap.end()) {
hashmap[tmp_val] = word;
}
else {
if (hashmap[tmp_val] != word) {
return false;
}
}
}
return (hashset.size() == hashmap.size() and i == sz);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ leetcode 算法 hashmap