LeetCode290-单词模式
一开始我以为,只要一个Hash表,键是abcd,值是单词
1、如果key没有出现过,那就设置key - value
2、如果key有了,那就看value是不是str里面那个单词。
但是这样会有一个问题,value重复
比如 abba dog dog dog dog 是对的
因为
a->dog
b->dog
那么其实只要给key和vlaue各一个set,去重就行了。如果size相等,就是真
这个神来之笔,我也不知道怎么想出来的。
1、先key -》 value,单向正确。保证顺序是对的。
2、单向正确之后,有多少个不重复的key,就应该有多少个不重复的value
class Solution { public boolean wordPattern(String pattern, String str) { if (pattern==null||pattern.length()==0) return false; if (str==null||str.length()==0) return false; String [] array = str.split(" "); if(pattern.length()!=array.length) return false; Map<Character,String> map = new HashMap<>(); //去重 Set<Character> set1 = new HashSet<>(); Set<String> set2 = new HashSet<>(); for(int i=0;i<pattern.length();i++){ String temp = map.get(pattern.charAt(i)); if(temp==null){ map.put(pattern.charAt(i),array[i]); set1.add(pattern.charAt(i)); set2.add(array[i]); }else { //先保证两边是单向对应的 if(!temp.equals(array[i])) return false; } } if(set1.size()==set2.size()) return true; else return false; } }