290. Word Pattern [easy] (Python)
Posted coder_orz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了290. Word Pattern [easy] (Python)相关的知识,希望对你有一定的参考价值。
题目链接
https://leetcode.com/problems/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 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),判断字符串是否匹配该模式。这里匹配指的是完全匹配,是pattern中的字符和str中的非空单词之间的双射。
这题与另一题非常类似,解法基本一致,可参看:
205. Isomorphic Strings
思路方法
思路一
同时遍历pattern的每个字符,和str中的每个word,建立它们的映射关系,当出现违背映射关系的情况时,可直接返回false。另外,由于是双射,pattern中的不同字符不能映射到相同的word,所以也要做这方面的检查。
代码
class Solution(object):
def wordPattern(self, pattern, str):
"""
:type pattern: str
:type str: str
:rtype: bool
"""
words = str.split(' ')
if len(words) != len(pattern):
return False
hashmap = {}
mapval = {}
for i in xrange(len(pattern)):
if pattern[i] in hashmap:
if hashmap[pattern[i]] != words[i]:
return False
else:
if words[i] in mapval:
return False
hashmap[pattern[i]] = words[i]
mapval[words[i]] = True
return True
思路二
对于pattern和str,分别用一个数组记录每个字符或word第一次出现的位置。当同时遍历pattern和str时,如果发现它们在某一位置的字符或word第一次出现的位置不同,则返回false。
代码
class Solution(object):
def wordPattern(self, pattern, str):
"""
:type pattern: str
:type str: str
:rtype: bool
"""
words = str.split(' ')
if len(words) != len(pattern):
return False
return map(pattern.find, pattern) == map(words.index, words)
思路三
根据题目的描述,pattern有多少种不同的字符,str也有多少种不同的word。如果我们将映射写成字符对的形式,比如 (‘a’,’dog’) 表示pattern中字符’a’映射到str中’dog’,那么映射的个数与pattern中字符的种类数相同。
所以该方法本质上也是判断映射是不是双射。
代码
class Solution(object):
def wordPattern(self, pattern, str):
"""
:type pattern: str
:type str: str
:rtype: bool
"""
words = str.split(' ')
if len(words) != len(pattern):
return False
return len(set(pattern)) == len(set(words)) == len(set(zip(pattern, words)))
PS: 新手刷LeetCode,新手写博客,写错了或者写的不清楚还请帮忙指出,谢谢!
转载请注明:http://blog.csdn.net/coder_orz/article/details/51693647
以上是关于290. Word Pattern [easy] (Python)的主要内容,如果未能解决你的问题,请参考以下文章