[23] 用 python 刷 Leetcode: 290 Word Pattern

因为我对 python 不熟,题目可能会在简单和中等之间跳来跳去

用 Python3 解 LeetCode 系列,290 Word Pattern,属於 Easy

原始题目

Given a pattern and a string s, find if s 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 s.

Example 1:

Input: pattern = "abba", s = "dog cat cat dog"
Output: true
Example 2:

Input: pattern = "abba", s = "dog cat cat fish"
Output: false

Example 3:

Input: pattern = "aaaa", s = "dog cat cat dog"
Output: false

Example 4:

Input: pattern = "abba", s = "dog dog dog dog"
Output: false

题目分析

  • 给你一个模式patterns
  • pattern 里的每个字母对应s一个单字,相同字母单字必须一样
  • 判断s是否符合pattern

解题过程

  1. 长度判断,如果pattern字母数量和s单字数量不同,一定就是 false
  2. mapping_dict的 key 是pattern的字母,值是同 index 的s内容
  3. exist_check_dict的 key 是s的单字,值是pattern的字母
  4. 遍历pattern所有值
  5. 检查当前pattern字母为 key 的mapping_dict资料,和s中相同位置的单字有没有一样
  6. 检查和当前pattern字母同 index 的 s 单字所对应的字母和exist_check_dict纪录中的字母有没有一样
class Solution:
    def wordPattern(self, pattern: str, s: str) -> bool:
        # 长度判断,如果不同长度一定就是 false
        words_list = s.split(' ')
        words_len = len(words_list)
        pattern_len = len(pattern)
        if words_len != pattern_len:
            return False
        
        mapping_dict = dict()
        exist_check_dict = dict()

        for index, val in enumerate(pattern):
            
            # 如果 pattern key 存在
            if val in mapping_dict.keys():
                
                # 检查 pattern 字母代表的单字是否一致
                if mapping_dict[val] != words_list[index]:
                    return False
            else:
                # 检查有没有重复的单字在不同字母中
                if words_list[index] in exist_check_dict:
                    if exist_check_dict[words_list[index]] != val:
                        return False
                else :
                    mapping_dict[val] = words_list[index]
                    exist_check_dict[words_list[index]] = val

        return True

结果

result


<<:  EP 29: Archive and Publish TopStore App for Android in Visual Studio

>>:  DAY22 这边先帮你上一个按钮喔~(四)

JavaScript学习日记 : Day23 - 解构赋值

解构赋值(Destructuring Assignment)是一个在ES6的新特性,用於提取阵列或物...

Dungeon Mizarka 015

UIS里看起来最不容易理解的就是它的UI架构,阶段关系和一堆堆的元件看了就觉得不容易放入到现有的专案...

[Day 15] 机器学习常胜军 - XGBoost

XGBoost 今日学习目标 XGBoost 介绍 XGBoost 是什麽?为什麽它那麽强大? XG...

CSS微动画 - 弹出来的选单 Part.2

Q: 是不是来点icon比较知道这是干嘛的? A: 不复杂的可以用css画,复杂的可以考虑出图或是...

Day_06 无线转有线

了解完套件更新的地方後,再回来玩其他的网路架构。依照day04的架构,严格说来树梅派wifi连上的其...