leetcode290单词规律

leetcode 290 Word Pattern

Posted by BY on August 7, 2020

前言

持续更新了

正文

问题来源

本问题来自leetcode上的290题。

问题描述

给定一种规律 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

分析:

func wordPattern(pattern string, str string) bool {
    strs := strings.Split(str, " ")
    if len(pattern) != len(strs) {
        return false
    }
    ps := make(map[byte]string)
    sp := make(map[string]byte)
    for i := 0; i < len(pattern); i++ {
        v1, ok1 := ps[pattern[i]]
        v2, ok2 := sp[strs[i]]
        if ok1 && ok2 {
            if v1 != strs[i] || v2 != pattern[i] {
                return false
            }
        } else if !ok1 && !ok2 {
            ps[pattern[i]] = strs[i]
            sp[strs[i]] = pattern[i]
        } else {
            return false
        }
    }
    return true
}

总结:

勤思考。

结语

不管怎么样好好加油。