leetcode-290 | 单词模式


title: leetcode-290 | 单词模式
date: 2019-4-26 09:20:58
comments: true
categories: “leetcode”
tags:
- leetcode 简单难度

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 ms 11.7MB python
发布了169 篇原创文章 · 获赞 139 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/qq_26460841/article/details/102641708
今日推荐