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.
解法一:
建立连个hash表,字母和单词对应以后会有相同的映射,这里用位置i+1作为映射值。如果字母或者单词有一个存在hash表中,检查对应映射。如果不同,返回false。最后还要检查输入单词数是否和pattern长度相同。
另外要记住如何将string中的单词以space为间隔分开。
class Solution {
public:
bool wordPattern(string pattern, string str) {
unordered_map<char,int> m1;
unordered_map<string,int> m2;
istringstream in(str);
int i = 0;
for(string word; in>>word; i++){
if (m1.find(pattern[i])!=m1.end() || m2.find(word)!=m2.end()){
if (m1[pattern[i]]!=m2[word]) return false;
}
else
m1[pattern[i]]=m2[word]=i+1;
}
return i==pattern.size();
}
};
本文介绍了一种使用哈希表实现的字符串模式匹配算法,该算法能够判断一个给定的字符串是否符合指定的模式。通过两个哈希表分别记录模式中的字符与字符串中的单词之间的映射关系,确保每个字符和单词之间具有一一对应的关系。
489

被折叠的 条评论
为什么被折叠?



