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;
}
}