【LeetCode】每日一題290. 單詞規律
阿新 • • 發佈:2020-12-22
290. 單詞規律
給定一種規律 pattern 和一個字串 str ,判斷 str 是否遵循相同的規律。
這裡的 遵循 指完全匹配,例如, pattern 裡的每個字母和字串 str 中的每個非空單詞之間存在著雙向連線的對應規律。
示例1:
輸入: pattern = "abba", str = "dog cat cat dog"
輸出: true
示例 2:
輸入:pattern = "abba", str = "dog cat cat fish"
輸出: false
示例 3:
輸入: pattern = "aaaa", str = "dog cat cat dog"
輸出: false
示例 4:
輸入: pattern = "abba", str = "dog dog dog dog"
輸出: false
說明:
- 你可以假設 pattern 只包含小寫字母, str 包含了由單個空格分隔的小寫字母。
方法一:Hash表
分析題目,發現兩種情況不滿足規律
- 字母 x 已經出現過,但本次對應的字串不等於之前 x 對應的字串。
- 字母 x 未出現過,但對應的字串等於某個已經出現過的字串。
為了加速匹配,多用一個 Set 儲存已經出現過的字串
public boolean wordPattern(String pattern, String s) {
String[] strs = s.split(" ");
if (pattern.length() != strs.length) {
return false;
}
Map<Character, String> map = new HashMap<>();
Set<String> set = new HashSet< >();
for (int i = 0; i < strs.length; i++) {
char ch = pattern.charAt(i);
if (map.containsKey(ch) && !map.get(ch).equals(strs[i])) {
return false;
} else if (!map.containsKey(ch) && set.contains(strs[i])) {
return false;
}
map.put(ch, strs[i]);
set.add(strs[i]);
}
return true;
}