Word Pattern

原创 2015年11月17日 19:52:38

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.

解题思路:
首先想到就是用哈希表来做,建立模式字符串中每个字符和单词字符串每个单词之间的映射,而且这种映射必须是一对一关系的,不能’a‘和’b’同时对应‘dog’,所以我们在碰到一个新字符时,首先检查其是否在哈希表中出现,若出现,其映射的单词若不是此时对应的单词,则返回false。如果没有在哈希表中出现,我们还要遍历一遍哈希表,看新遇到的单词是否已经是哈希表中的映射,如果没有,再跟新遇到的字符建立映射。
注意:这里使用到istringstream来提取字符串“dog cat cat dog”中的单词,包含在头文件中。使用例子如下:

 string str = "qq cc ddd";
 istringstream stream(str);
 int a;
 while (stream >> a){
        cout << a << endl;
 }

The output will be
qq
cc
ddd
And then the loop will terminate automatically.

代码如下:

bool wordPattern(string pattern, string str) {
map<char, string> mp;
istringstream istr(str);
string tmp;
int i = 0;
while (istr >> tmp){
    if (i == pattern.size()){
        return false;
    }
    if (mp.find(pattern[i]) == mp.end()){
        for (auto j : mp){
            if (j.second == tmp){
                return false;
            }
        }
        mp[pattern[i]] = tmp;
    }
    else if (mp[pattern[i]] != tmp){
        return false;
    }
    i++;
}
if (i < pattern.size()) return false;
return true;
}

相关文章推荐

Word Pattern

  • 2016年05月15日 23:48
  • 981B
  • 下载

Leetocde_290_Word Pattern

http://blog.csdn.net/pistolove/article/details/49717803 Given a pattern and a string str, fi...

290-e-Word Pattern

判断字符与字符串是否成对对应,例如pattern = "abba", str = "dog cat cat dog" 返回true,如果str = “dog cat cat cat”则返回false,...

leetcode 哈希表专题-Word Pattern

记录下leetcode的题目:word pattern

290. Word Pattern

Given a pattern and a string str, find if str follows the same pattern. Here follow means a ful...

LeetCode笔记:290. Word Pattern

判断字符串中的单词是否匹配模型

Word Pattern - JS

Given a pattern and a string str, find if str follows the same pattern. Here follow means a ful...

290. Word Pattern(技巧:记录当前位置来判断两个字符串是否符合)

Given a pattern and a string str, find if str follows the same pattern. Here follow means a ful...

leetcode题解-205.Isomorphic Strings && 290. Word Pattern

题目:Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the c...

290. Word Pattern

Given a pattern and a string str, find if str follows the same pattern. Here follow means a ful...
  • x_shuck
  • x_shuck
  • 2016年03月25日 17:20
  • 72
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Word Pattern
举报原因:
原因补充:

(最多只允许输入30个字)