iT邦幫忙

2025 iThome 鐵人賽

DAY 10
0
自我挑戰組

leetcode解題學習java系列 第 10

30天LeetCode挑戰記錄-Day10. Word Pattern

  • 分享至 

  • xImage
  •  

題目

https://ithelp.ithome.com.tw/upload/images/20250924/20178158qSJVTQs9wn.jpg
他說會給我兩個字串,pattern是字母組成的,s是單字組成的,然後單字之間都用空格隔開。我們要判斷pattern跟s的關係是不是一樣。
條件:

  1. pattern的每個字母只能對應s的一個單字
  2. s的單字也只能對應一個pattern的字母
  3. 必須完全符合

Example:
Input: pattern = "abba", s = "dog cat cat dog"
Output: true
a對應dog。
b對應cat。

想法

我覺得我會先把s字串拆成單字的陣列,然後因為要保證字母跟單字互相對應對方,所以會用兩個Hashmap來讓他們互相對應,一個是字母對單字,一個是單字對字。
然後再用迴圈檢查,如果有一個不是這個對應關係就回傳false,如果兩個map都跑完沒問題就回傳true。

程式碼

class Solution {
    public boolean wordPattern(String pattern, String s) {

        //拆字串
        String[] words = s.split(" ");
        if (pattern.length() != words.length){
             return false;
        }

        //建立Map
        Map<Character, String> map1 = new HashMap<>();
        Map<String, Character> map2 = new HashMap<>();
        
        //比對他們的關係是不是對應的
        for (int i = 0; i < pattern.length(); i++) {
            char p = pattern.charAt(i);
            String w = words[i];
            
            //pattern → word
            if (map1.containsKey(p)) {
                if (!map1.get(p).equals(w)) {
                    return false;
                }
            } else {
                map1.put(p, w);
            }
            
            //word → pattern
            if (map2.containsKey(w)) {
                if (map2.get(w) != p) {
                    return false;
                }
            } else {
                map2.put(w, p);
            }
        }
        return true;
    }
}

執行成功
https://ithelp.ithome.com.tw/upload/images/20250924/20178158WsQvtLJneA.png

今天差一點來不及上傳...


上一篇
30天LeetCode挑戰紀錄-DAY9. First Unique Character in a String
下一篇
30天LeetCode挑戰紀錄-DAY11. Group Anagrams
系列文
leetcode解題學習java14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言