leetcode-290 | 单词模式

290. 单词模式(Word Pattern)

给定一种 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 包含了由单个空格分隔的小写字母。

思路

方法一: 分割字符串,然后对应位置判断

按照空格分割字符串,存入列表中。
对于模式串:pattern = "abba"str = "dog cat cat dog" 分别定义一个下标指针,同步移动。
a-->dog
b-->cat
存入后,判断下一个模式,如b,看str中指针指向的 是否是cat
当然,也要防止出现a-->dog b-->dog现象。

class Solution(object):
    #防止出现a-->dog  b-->dog
    def isNotInValue(self, ps, s):
        for i in ps.values():
            if i==s:
                return False
        return True
    def wordPattern(self, pattern, s):
        """
        :type pattern: str
        :type str: str
        :rtype: bool
        """
        li = s.split(" ")
        p_len, s_len = len(pattern), len(li)
        if p_len != s_len:
            return False
        #定义同步指针i,j
        i,j = 0,0
        #定义字典存放模式字母对应的字符串
        ps = dict()
        while j<p_len:
            #每次一进来就判断当前的下标i对应的模式字母是否在字典中
            if pattern[i] not in ps:
                #防止出现a-->dog  b-->dog
                if self.isNotInValue(ps, li[j]):
                    ps.update({pattern[i]: li[j]})
                else:
                    return False
            #这里判断的还是当前下标i对应的模式字母
            if li[j] == ps.get(pattern[i]):
                #匹配就同步移动指针
                j += 1
                i += 1
            else:
                return False
        return True

结果:
执行用时 : 28 ms, 在Word Pattern的Python提交中击败了98.04% 的用户
内存消耗 : 11.7 MB, 在Word Pattern的Python提交中击败了29.14% 的用户

提交时间状态执行用时内存消耗语言
几秒前通过28 ms11.7MBpython

   Reprint policy


《leetcode-290 | 单词模式》 by 梦否 is licensed under a Creative Commons Attribution 4.0 International License
 Previous
leetcode-205 | 同构字符串 leetcode-205 | 同构字符串
205. 同构字符串(Isomorphic Strings)给定两个字符串 s 和 t,判断它们是否是同构的。如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字
2019-04-26
Next 
leetcode-451 | 根据字符出现频率排序 leetcode-451 | 根据字符出现频率排序
451. 根据字符出现频率排序(Sort Characters By Frequency)给定一个字符串,请将字符串里的字符按照出现的频率降序排列。 示例1:输入:“tree”输出:“eert”解释:‘e’出现两次,’r’和’t’都只出现
2019-04-26
  TOC