Leetcode 290 Word Pattern

lc290 Word Pattern

有点类似lc205 同形字符串,思路也一样,就是比较相同字母映射的对象是否相同

题目提醒了,这是双射,即一一对应,比较容易想到的是用两个hashmap,源字符串和目标字符串分别做key值

不过可以参考lc205解法,只用一个hashmap,

这里有个小trick,申请hashmap时,可以直接用Map map = new HashMap() 或者 HashMap<Object, Integer>这样map的key值就可以是multitype的(Character,String都行)

而且由于hashmap的containsKey底层是由.equals()实现的,不同类型即使肉眼看值相等,containsKey()却检查不到。例如:char 'a'和String "a"是不同的,可以利用这一点,来用index来表示映射的字母

下面给出只用一个hashmap的解法

 1 class Solution {
 2     public boolean wordPattern(String pattern, String str) {
 3         String[] t = str.split(" ");
 4 
 5         if(t.length != pattern.length())
 6             return false;
 7         
 8         HashMap<Object, Integer> map = new HashMap<>();
 9         
10         for(Integer i=0; i<t.length; ++i){
11             if(map.put(pattern.charAt(i), i) != map.put(t[i], i))
12                 return false;
13         }
14         
15         return true;
16     }
17 }
原文地址:https://www.cnblogs.com/hwd9654/p/10955827.html