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;

    }
}
发布了214 篇原创文章 · 获赞 72 · 访问量 152万+

猜你喜欢

转载自blog.csdn.net/ssjdoudou/article/details/103916689