Leetcode Hash table 哈希表【代碼隨想錄Part 3.1】

【242. 有效的字母異位詞】

輸入: s = "anagram", t = "nagaram"輸出: true
【個(gè)人第一次讀題的感受】: 就是判斷各個(gè)字母出現(xiàn)的次數(shù)是不是一樣的,但是毫無頭緒。

咱們就逆向工程一下,學(xué)習(xí)別人如何用hash table來解決:
? ? ? ? ? ? ? ?由于只由a~z 26個(gè)字母,ASCII碼為連續(xù)的。
聲明一個(gè)數(shù)組,用來記錄字符串s里字符出現(xiàn)的次數(shù)。具體做法是:ASCII是連續(xù)的數(shù)值,所以字符a映射下標(biāo)為0,以此類推,z的下標(biāo)為25.
再遍歷 字符串s的時(shí)候,只需要將 s[i] - ‘a(chǎn)’ 所在的元素做+1 操作即可,并不需要記住字符a的ASCII,只要求出一個(gè)相對數(shù)值就可以了。 這樣就將字符串s中字符出現(xiàn)的次數(shù),統(tǒng)計(jì)出來了。最后利用for循環(huán)來消除出現(xiàn)過的。如果最后record有不為0的部分,那么就是false

【技術(shù)總結(jié)】:這道題目想不出來其實(shí)是對哈希表不熟悉。其實(shí)哈希表就是一個(gè)連連看找對應(yīng)的過程。其中數(shù)據(jù)規(guī)模較小的話,使用數(shù)組來記錄數(shù)據(jù)。
其次,通過對字符串的元素依次訪問求出“偏移量”存進(jìn)record里面。
最后就是,利用訪問t字符串以及偏移量去訪問元素,減去訪問過的。
如果是相同的字符串,那么它們應(yīng)該是 0.true

還有3個(gè)題,但是太苦手了。明天再解決兩個(gè)題8
標(biāo)簽: