290. Word Pattern

2 maps...和刚才做的一个很像。。

public class Solution {
    public boolean wordPattern(String pattern, String str) {
        String[] strings = str.split("\\s+");
        if (strings.length != pattern.length()) return false;
        Map<Character, String> map1 = new HashMap<Character, String>();
        Map<String, Character> map2 = new HashMap<>();
        for (int i = 0; i < strings.length; i++) {
            char c = pattern.charAt(i);
            String s = strings[i];
            if (!map1.containsKey(c) && !map2.containsKey(s)) {
                map1.put(c, s);
                map2.put(s, c);
            } else if (!map1.containsKey(c) || !map2.containsKey(s)) {
                return false;
            } else {
                if (!map1.get(c).equals(s) || map2.get(s) != c) return false;
            }
        }
        return true;
    }
}

看到一个牛逼的做法。。。

public class Solution {
    public boolean wordPattern(String pattern, String str) {
        String[] strings = str.split("\\s+");
        if (strings.length != pattern.length()) return false;
        Map map = new HashMap<>();
        
        for (Integer i = 0; i < strings.length; i++) {
            if (map.put(strings[i], i) != map.put(pattern.charAt(i),i)) return false;
        }
        return true;
        
    }
}

这里比较的似乎是Object,通过map.put()返还的Object, 所以for loop里是Integer而不是int。 好像是跟JAVA 常量池有关?

挺神奇的。。

posted @ 2016-11-05 13:48  哇呀呀..生气啦~  阅读(69)  评论(0)    收藏  举报