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 }