290. 单词规律

题目描述
在这里插入图片描述

解题思路
类似于同构字符串(205. 同构字符串)的思路,使用两个map来分别记录从pattern到str的映射和str到pattern的映射。注意需要先把str字符串分割成字符串数组,然后思路相同,不赘述了。

代码

func wordPattern(pattern string, str string) bool {
    arr := strings.Split(str, " ")
    if len(pattern) == 0 && len(arr) == 0 {
        return true
    }

    if len(pattern) != len(arr) {
        return false
    }

    return bilateralCheck(pattern, arr)
}

func bilateralCheck(p string, a []string) bool {
    m1 := map[byte]string{}
    m2 := map[string]byte{}
    b1, b2 := true, true
    for i := 0; i < len(p); i++ {
        if m1[p[i]] != "" {
            if m1[p[i]] != a[i] {
                b1 = false
                break
            }
        } else {
            m1[p[i]] = a[i]
        }
    }
    for i := 0; i < len(a); i++ {
        if m2[a[i]] != 0 {
            if m2[a[i]] != p[i] {
                b2 = false
                break
            }
        } else {
            m2[a[i]] = p[i]
        }
    }

    return b1 && b2
} 
发布了227 篇原创文章 · 获赞 126 · 访问量 23万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 程序猿惹谁了 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览