LeetCode290:单词规律

目录

一、题目

二、示例

三、思路

四、代码


一、题目

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

三、思路

1、首先先将字符串 进行切片,分隔符为空格;

2、match字典,用于存储pattern字符串s中的单词,pattern中的值作为match的key值字符串中的单词作为match中的value值

例如:match = {'a': 'dog', 'b': 'cat'}

3、分两种情况:

  • 第一种:当字符串s的长度pattern长度不相等不匹配,返回False
  • 第二种:当字符串s的长度pattern长度相等

    遍历字符串spattern

  •     当pattern[i]不存在与match字典中时:

            如果与之对应的单词s[i]在字典中,不匹配,则返回False;

            如果没有与之对应的s[i]单词,则将其加入到字典match中;

  •     当pattern[i]存在于match[i]字典中:

            如果与之对应的单词s[i]在字典中,当前匹配,则继续;

            如果没有与之对应的s[i]单词,不匹配,则返回False。

四、代码

class Solution:
    def wordPattern(self, pattern: str, s: str) -> bool:
        """
        :param pattern: str
        :param s: str
        :return: bool
        """
        s = s.split()
        match = dict()
        # str中单词数和pattern长度不相同,返回False
        if len(s) != len(pattern):
            return False
        
        for i in range(len(s)):
            if pattern[i] not in match:
                if s[i] in match.values():
                    return False
                match[pattern[i]] = s[i]
            else:
                if s[i] != match[pattern[i]]:
                    return False
        return True

if __name__ == '__main__':
    pattern = "abba"
    # strs = "dog cat cat dog"
    strs = "dog cat cat fish"
    s = Solution()
    ans = s.wordPattern(pattern, strs)
    print(ans)

猜你喜欢

转载自blog.csdn.net/weixin_45666660/article/details/111245716