1. 程式人生 > 其它 >【LeetCode】每日一題290. 單詞規律

【LeetCode】每日一題290. 單詞規律

技術標籤:每日一題leetcodejava

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表

分析題目,發現兩種情況不滿足規律

  1. 字母 x 已經出現過,但本次對應的字串不等於之前 x 對應的字串。
  2. 字母 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; }

執行結果

在這裡插入圖片描述