LeetCode:Word Pattern
1、题目:
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.
2、代码:
一个哈希表的故事,顺带处理字符串。类似于:
Isomorphic Strings(同构字符串)
http://blog.csdn.net/bestzem/article/details/51953658
class Solution {
public:
bool wordPattern(string pattern, string str) {
string hash[26]{};
auto iterp=pattern.begin(),iters=str.begin();
for(auto iter1=iters+1;iterp!=pattern.end()&&iters!=str.end();++iter1)
{
if((iter1==str.end()||*iter1==' ')&&(hash[*iterp-97].empty()))
{
string s(iters,iter1);
//查找是否已经存在于其他模式
for(int i=0;i<26;++i)
{
if(hash[i]==s)
{
return false;
}
}
hash[*iterp-97]=s;
if(iter1!=str.end())
iters=iter1+1;
else
iters=iter1;
++iterp;
}
else if((iter1==str.end()||*iter1==' ')&&(!hash[*iterp-97].empty()))
{
//出现了双匹配,错误
if(hash[*iterp-97]!=string(iters,iter1))
return false;
if(iter1!=str.end())
iters=iter1+1;
else
iters=iter1;
++iterp;
}
}
//处理模板与字符串长度不一致
if(iterp!=pattern.end()||iters!=str.end()) return false;
return true;
}
};