LeetCode-Python-290. 单词模式

647 篇文章 23 订阅

给定一种 pattern(模式) 和一个字符串 str ,判断 str 是否遵循相同的模式。

这里的遵循指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应模式。

示例1:

输入: pattern = "abba", str = "dog cat cat dog"
输出: true

示例 2:

输入:pattern = "abba", str = "dog cat cat fish"
输出: false

示例 3:

输入: pattern = "aaaa", str = "dog cat cat dog"
输出: false

示例 4:

输入: pattern = "abba", str = "dog dog dog dog"
输出: false

说明:
你可以假设 pattern 只包含小写字母, str 包含了由单个空格分隔的小写字母。  

 

思路:

建立一个 str 到pattern的hashmap,用record数组记录一下pattern里每个元素出现的次数

对于str 里的每个word,

如果它本来不在hashmap里,而它对应的pattern小写字母出现次数 》 0,说明它被绿了,return False

如果它本来不在hashmap里,而它对应的pattern小写字母也没出现过,说明一切正常,OK, 建立新的映射,并且record记录好

如果它在hashmap里, 而它对应的pattern小写字母和记录里的不一样,说明它出轨了,return False                                       

class Solution(object):
    def wordPattern(self, pattern, str):
        """
        :type pattern: str
        :type str: str
        :rtype: bool
        """
        s = str.split(" ")
        if len(pattern) != len(s):
            return False
        record = [0 for i in range(0, 26)] #记录下pattern里每个字母出现的次数
        hashmap = dict()
        
        for i, word in enumerate(s):
            t = ord(pattern[i]) - ord("a")
            
            if word not in hashmap.keys():
                if record[t] > 0:
                    return False
                hashmap[word] = pattern[i]
                record[t] = 1
            else:
                if hashmap[word] != pattern[i]:
                    return False
                
        return True
                
            
        

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值