Leetcode刷題日記 - #205 isomorphic Strings
題目請自行上Leetcode閱讀:https://leetcode.com/problems/isomorphic-strings/
HashTable:需要記憶什麼字母對應到什麼字母(mapping),直接會想到HashTable
本來以為很簡單,結果卡住了一下,在Loop的時候,一邊把mapping做出來,像是”egg”, “add” 就會產生一個 {e:a, g:d} 的mapping,做mapping的時候還可以順便確認新的mapping是不是1對1還決定是否是isomorphic,有可能有幾種狀況
- 這個字母不在mapping裏面,直接加入mapping
- 這個字母在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,這題不難。
Member discussion