2 min read

Leetcode刷題日記 - #205 isomorphic Strings

Leetcode刷題日記 - #205 isomorphic Strings
Photo by Joan Gamell / Unsplash

題目請自行上Leetcode閱讀:https://leetcode.com/problems/isomorphic-strings/

HashTable:需要記憶什麼字母對應到什麼字母(mapping),直接會想到HashTable

本來以為很簡單,結果卡住了一下,在Loop的時候,一邊把mapping做出來,像是”egg”, “add” 就會產生一個 {e:a, g:d} 的mapping,做mapping的時候還可以順便確認新的mapping是不是1對1還決定是否是isomorphic,有可能有幾種狀況

  1. 這個字母不在mapping裏面,直接加入mapping
  2. 這個字母在mapping 裏面,但是mapping的結果與現在同個位置的字母不同,那不是isomorphic string

這樣聽起來好像可以!

但是我發現”bar”, “foo”的狀況就會有錯,mapping會是{b: f, a: o,. r: o},原來另外一個條件是另外一個方向的mapping也要是1 to 1,所以要另外加一個condition,確認新加入的value沒有在dict.values()裏面出現過

這題沒想清楚就會錯,但是跑完test case大概就知道怎麼修bug了,也許錯了之後可以炫一下debug能力也不錯(?)

class Solution:
    def isIsomorphic(self, s: str, t: str) -> bool:
        dict = {}
        for i in range(len(s)):
            if s[i] in dict:
               if t[i] != dict[s[i]]:
									 # 查看s之於t是不是1 to 1
                   return False
            elif t[i] in dict.values():
										# 查看t之於s是不是1 to 1
                    return False
            dict[s[i]] = t[i]
        return True

結語:只要會HashTable、抓出1 to 1這個重點,跟debug,這題不難。