290. Word Pattern [easy] (Python)
来源:互联网 发布:各国战争潜力知乎 编辑:程序博客网 时间:2024/06/06 12:33
题目链接
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)
- Easy-题目49:290. Word Pattern
- Leetcode 290. Word Pattern (Easy) (cpp)
- [leetcode: Python]290.Word Pattern
- <LeetCode><Easy>290 Word Pattern
- leetcode 290[easy]----Word Pattern
- 【leetcode】290. Word Pattern(Python & C++)
- 【leetcode】290. Word Pattern
- 【leetcode】290. Word Pattern
- 290. Word Pattern
- 290. Word Pattern
- 290. Word Pattern
- 290. Word Pattern
- 290. Word Pattern LeetCode
- 290. Word Pattern
- 290. Word Pattern
- 290. Word Pattern
- 290. Word Pattern
- IOS 传感器Core Motion相关简述
- 禁止 EditText会接收焦点
- 华为C语言编程规范—代码测试、维护
- Android studio 上SVN的使用和配置
- MFC对话框扩展区域显示(可伸缩对话框区域)
- 290. Word Pattern [easy] (Python)
- android 计算器(GridView实现)
- React Native 中 ScrollView 性能探究
- 解决MYSQL的错误:Got a packet bigger than 'max_allowed_packet' bytes
- activity 生命周期发生变化的时候,用fragment保存数据或者异步任务数据的文章
- spring mvc 入门系列之一--HelloWorld(xml配置)
- 自定义侧滑组件+自定义属性
- AngularJs入门基础
- 使用Animation编辑器编辑动画