Leetcode - Word Pattern

有点意思的题目。
以前第一次看没看懂,今天看懂了。
但是第一遍还是没能过。有个细节没想到。

My code:

import java.util.HashMap;
import java.util.HashSet;

public class Solution {
    public boolean wordPattern(String pattern, String str) {
        String[] pa = str.split(" ");
        if (pattern.length() != pa.length)
            return false;
        HashMap vec = new HashMap();
        HashSet h = new HashSet();
        for (int i = 0; i < pattern.length(); i++) {
            char tmp = pattern.charAt(i);
            if (vec.containsKey(tmp)) {
                String val = vec.get(tmp);
                if (!val.equals(pa[i]))
                    return false;
            }
            else {
                if (h.contains(pa[i]))
                    return false;
                vec.put(tmp, pa[i]);
                h.add(pa[i]);
            }
        }
        return true;
    }
}

细节在于这里:
a b b a
dog dog dog dog
这是false的
那么,每次给hash map 插入新的元素的时候就需要判断下,这个key对应的value是否已经存在过了,即,其他key是不是也拥有这个val。
那么就用一个hash set来存放所有的val。
如果发现contains,即重复了,那么就判断为false
使用hash set, 因为hash set 的特性是,里面的元素只出现一次,不重复。这是天哥教我的。

**
总结:
细节要注意。
**

Anyway, Good luck, Richardo!

你可能感兴趣的:(Leetcode - Word Pattern)