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

 

posted @ 2018-09-20 23:12  朋友圈  阅读(396)  评论(0编辑  收藏  举报