您的位置:首页 > 其它

<LeetCode OJ> 290. Word Pattern

2016-02-11 18:09 369 查看


290. Word Pattern

My Submissions

Question

Total Accepted: 24989 Total
Submissions: 89440 Difficulty: Easy

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.
Credits:

Special thanks to @minglotus6 for adding this problem and creating all test cases.

Subscribe to see which companies asked this question

Hide Tags
Hash Table

Show Similar Problems

分析:

首先提取str = "dog cat cat dog"为,vecstr={"dog","cat","cat","dog"}

接着利用哈希map(unordered_map)建立对应关系,以下面这个测试案例为例

"abba"

"dog dog dog dog",应该返回false

建立对应正序关系1:通过判断已经被插入mapping1的元素是否矛盾来

mapping1['a']="dog",mapping1['b']="dog",mapping1['b']="dog",mapping1['a']="dog"

能通过测试,因为'a','b'对应的实值的确是"dog"

建立对应反序关系2:通过判断已经被插入mapping2的元素是否矛盾来

mapping2["dog"]='a',mapping2["dog"]="dog",mapping2["dog"]="dog",mapping2["dog"]='a'

不能通过测试,因为"dog"对应的实值的确是'a'不能'b'

这位小伙伴尽然做的和我一样:http://blog.csdn.net/booirror/article/details/50084075

class Solution {
public:
    bool wordPattern(string pattern, string str) {
        //提取str = "dog cat cat dog"为,"dog","cat","cat","dog"
        vector<string>  vecstr;
        int beginpos=0,endpos=0;
        while( endpos < str.size() )
        {
            while(endpos < str.size()&& str[endpos]!=' ')
                endpos++;
            string sub=str.substr(beginpos,endpos-beginpos);
            vecstr.push_back(sub);
            beginpos=++endpos;
        }
        if(vecstr.size()!=pattern.size())
            return false;
        unordered_map<char,string>   mapping1;
        unordered_map<string,char>   mapping2;
        for(int i=0;i<pattern.size();i++)
        {
            if(mapping1.find(pattern[i])==mapping1.end())//正序判断
                mapping1[pattern[i]]=vecstr[i];
            else{
                if(mapping1[pattern[i]]!=vecstr[i])
                    return false;
            }
            if(mapping2.find(vecstr[i])==mapping2.end())//逆序判断
                mapping2[vecstr[i]]=pattern[i];
            else{
                if(mapping2[vecstr[i]]!=pattern[i])
                    return false;
            } 
        }
        return true;
    }
};


注:本博文为EbowTang原创,后续可能继续更新本文。如果转载,请务必复制本条信息!

原文地址:http://blog.csdn.net/ebowtang/article/details/50651635

原作者博客:http://blog.csdn.net/ebowtang
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: