问题描述
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.
思路分析
判断一个由多个单词组成的string是否是和字母的出现顺序是相同的。
使用两个map,将字符和单词转换为int值,看是否匹配。最后对比word和char的数量是否一致。注意要将循环匹配值规定为一致。
代码
class Solution {
public:
bool wordPattern(string pattern, string str) {
map<char, int> p2i;
map<string, int> w2i;
istringstream in(str);
int i = 0, n = pattern.length();
for(string word; in >> word; i++){
if (p2i[pattern[i]] != w2i[word])
return false;
p2i[pattern[i]] = w2i[word] = i + 1;
}
return i==n;
}
};
时间复杂度:
O(n)
空间复杂度:
O(n)
反思
对于hash table的应用。还有iostream,已经有些陌生了。