Leetcode【290】Word Pattern(Java版)

1、这道题最直白的思路是Map,生成键值对

2、这里的Objects.equals很好理解,判断想不想等,特别注意的是,被比较的两个值都可以是null

3、重点是为啥两个Map.put()操作可以被比较???

因为Map.put()操作也是由返回值的 如果没有键映射,则返回NULL。 该函数返回与指定键关联的旧值。 这个操作不管啥条件都会覆盖旧的。 第三条不用看

如果新加入的,则返回null,如果新加入的键值对中的键已经存在,那么返回这个键的原来的值,当存在这个key的时候,会覆盖掉原来的value并返回oldvalue,也就是旧值

举个栗子

abba,a=0,返回null,b=1,返回null,b=2,返回1,a=3,还是返回0

dog cat cat dog,dog=0,返回null,cat=1,返回null,cat=2返回1,dog=3,返回0

假设第三个cat不是cat,那么返回就是null,因为之前没出现过

class Solution {
    public boolean wordPattern(String pattern, String str) {    
        // 创建Map
        Map<Object, Integer> map = new HashMap<>();
        // 分隔目标字符串
        String[] words = str.split(" ");
        // 做个筛选,长度不等,直接pass
        if (words.length != pattern.length()) 
            return false;
        // 遍历单词字符串
        // 单词和模式同时放入map里,此时value都是一样的,那么就判断key是否一样即可
        for (int i = 0; i < words.length; i++) 
            if (!Objects.equals(map.put(words[i], i), map.put(pattern.charAt(i), i))) 
                return false;
        return true;

    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值