這個是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; }