[LeetCode] Word Pattern

简介: 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 s

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.

解题思路

  • 用一个哈希表建立从pattern中字符到str中字符串的映射。
  • 用一个集合表示str中字符串是否已作为值出现在哈希表中。
    以下两种情况为假:
    • 哈希表中已存在key,但是对应的value值不一样。
    • 哈希表中不存在key,但是对应的值已作为其他key的value值。

实现代码

C++:

// Runtime: 0 ms
class Solution {
public:
    bool wordPattern(string pattern, string str) {
        vector<string> words;
        istringstream iss(str);
        string temp;
        while (iss>>temp)
        {
            words.push_back(temp);
        }
        if (words.size() != pattern.size())
        {
            return false;
        }
        unordered_map<char, string> mymap;
        set<string> used;
        for (int i = 0; i < pattern.length(); i++)
        {
            if (mymap.find(pattern[i]) == mymap.end())
            {
                if (used.find(words[i]) == used.end())
                {
                    mymap[pattern[i]] = words[i];
                    used.insert(words[i]);
                }
                else
                {
                    return false;
                }
            }
            else if (mymap[pattern[i]].compare(words[i]) != 0)
            {
                return false;
            }
        }

        return true;
    }
};

Java:

// Runtime: 3 ms
public class Solution {
    public boolean wordPattern(String pattern, String str) {
        String words[] = str.split(" ");
        if (pattern.length() != words.length) {
            return false;
        }
        Map<Character, String> mymap = new HashMap<Character, String>();
        for (int i = 0; i < pattern.length(); i++) {
            if (!mymap.containsKey(pattern.charAt(i))) {
                if (!mymap.containsValue(words[i])) {
                    mymap.put(pattern.charAt(i), words[i]);
                }
                else {
                    return false;
                }
            }
            else if (!mymap.get(pattern.charAt(i)).equals(words[i])) {
                return false;
            }
        }

        return true;
    }
}
目录
相关文章
LeetCode 318. Maximum Product of Word Lengths
给定一个字符串数组 words,找到 length(word[i]) * length(word[j]) 的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。
74 0
LeetCode 318. Maximum Product of Word Lengths
LeetCode 290. Word Pattern
给定一种 pattern(模式) 和一个字符串 str ,判断 str 是否遵循相同的模式。 这里的遵循指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应模式。
44 0
LeetCode 290. Word Pattern
LeetCode 212. Word Search II
给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。
73 0
LeetCode 212. Word Search II
|
索引
LeetCode 79. Word Search
给定一个2D板和一个单词,找出该单词是否存在于网格中。 该单词可以由顺序相邻的单元的字母构成,其中“相邻”单元是水平或垂直相邻的单元。 相同的字母单元格不得多次使用。
69 0
LeetCode 79. Word Search
|
索引 存储
LeetCode 290 Word Pattern(单词模式)(istringstream、vector、map)(*)
版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/50611509 翻译 给定一个模式,和一个字符串str,返回str是否符合相同的模式。
953 0
LeetCode 58 Length of Last Word(最后单词的长度)
版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/50592917 翻译 给定一个包含大小写字母和空格字符的字符串, 返回该字符串中最后一个单词的长度。
725 0
|
5天前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行