給定一種 pattern(模式) 和一個字符串 str ,判斷 str 是否遵循相同的模式。 這裏的遵循指徹底匹配,例如, pattern 裏的每一個字母和字符串 str 中的每一個非空單詞之間存在着雙向

這個是LeetCode上的一道題目。本機上運行時正確的,可是LeetCode上顯示是錯誤的,因此沒有辦法了只能記錄在博客上了。git

個人想法是先把pattern和str都轉化成數組。例如"abba"就記錄成 p[0] = a, p[1] = b, p[2] = b, p[3] = a。github

而後再使用hashmap統計字符出如今數組中的位置。數組

最後將pattern和str統計的位置進行比較,若是相同就是遵循規則的,不一樣就是不遵循規則的。spa

下面是代碼。你也能夠查看個人GitHub來查看更多LeetCode題目解析code

/**
     * 查看單詞str是否匹配模式pattern
     * 
     * @param pattern
     * @param str
     * @return
     */
    public boolean wordPattern(String pattern, String str) {
        char[] p = pattern.toCharArray();
        String[] s = str.split(" ");

        HashMap<Character, String> pMap = new HashMap<Character, String>();
        for (int i = 0; i < p.length; i++) {
            if (pMap.containsKey(p[i])) {
                String v = pMap.get(p[i]);
                v = v + i;
                pMap.put(p[i], v);
            } else {
                pMap.put(p[i], String.valueOf(i));
            }
        }

        HashMap<String, String> sMap = new HashMap<String, String>();
        for (int i = 0; i < s.length; i++) {
            if (sMap.containsKey(s[i])) {
                String v = sMap.get(s[i]);
                v = v + i;
                sMap.put(s[i], v);
            } else {
                sMap.put(s[i], String.valueOf(i));
            }
        }

        Collection<String> values = pMap.values();
        Iterator<String> it = values.iterator();
        while (it.hasNext()) {
            String v = it.next();
            if (!sMap.containsValue(v))
                return false;

        }

        return true;
    }
相關文章
相關標籤/搜索