# 前言
? ? ? ? 昨天發布了第一遍博客,感覺很好,趁著我現在還是很感興趣就多發幾遍,希望能堅持下去,在這里記錄下自己學習成長的經歷。
? ? ? ? 今天是周五,下周一就又要去實習啦,距離上一段實習剛結束一個月,之前的是運維實習,這次找了開發的實習,目前是又期待又害怕(害怕啥都不會),總之還是去試試吧。最近在學go語言,今天不想往下學,那就刷刷題吧,打算先把面試150題刷完。
# 開始刷題
383.贖金信:
https://leetcode.cn/problems/ransom-note/description/?envType=study-plan-v2&envId=top-interview-150
?????????思路很簡單,就是先遍歷一遍magazine,在哈希表中統計一下各個單詞出現的次數,統計完后再去遍歷一遍ransomNote,出現的字符再map中--就行了,若中--map[c] < 0 那就是無法構造出ransomNote,直接返回false就行。
????????我本來還在用if (map[c].count()>0) {map[c]++;} else {map[c] = 1;}這種寫法,看了題解之后發現可以直接寫成++map[c],代碼瞬間清晰很多。
class Solution
{
public:bool canConstruct(string ransomNote, string magazine){if (ransomNote.size() > magazine.size()){return false;}unordered_map<char, int> map;for (char c : magazine){++map[c];}for (char c : ransomNote){if (--map[c] < 0){return false;}}return true;}
};
題解中還出了一種利用定長數組去代替哈希表的方法,感覺很好,比哈希表省空間。
class Solution
{
public:bool canConstruct(string ransomNote, string magazine){if (ransomNote.size() > magazine.size()){return false;}vector<int> v(26);for (auto &c : magazine){v[c - 'a']++;}for (auto &c : ransomNote){if (--v[c - 'a'] < 0){return false;}}return true;}
};
205、同構字符串
https://leetcode.cn/problems/isomorphic-strings/description/?envType=study-plan-v2&envId=top-interview-150
這道題是簡單題,我一開始確實想簡單了,我只用了一個哈希表,去判斷s與t是不是一一對應,結果卻始終通不過。
最后看了題解,才知道要完成雙射,即s-t 和t-s ,為何呢?要不會出現下面這種情況
a b c b a
e e d e e? ? ? ? a,b都對應上e的話,僅僅依靠單射,也是可以的,但題目明確說明了一個字符只能對應一個字符,所以要完成雙射判斷。
下面代碼是我抄的leetcode官方題解:
class Solution
{
public:bool isIsomorphic(string s, string t){unordered_map<char, char> s2t;unordered_map<char, char> t2s;int len = s.length();for (int i = 0; i < len; ++i){char x = s[i], y = t[i];if ((s2t.count(x) &&s2t[x] != y) ||t2s.count(y) && t2s[y] != x){return false;}s2t[x] = y;t2s[y] = x;}return true;}
};
# 結尾?
? ? ? ? 今天就先到這把,雖然兩個有點少,還都是有關哈希表的簡單題,因為我接下來想要研究一下github,創建一個自己的git倉庫。
? ? ? ? 今天晚上還和舍友約了自助餐,吃完之后再去看一下實習期間要租的小屋,今天還是挺忙的,就到這里吧。
? ? ? ? 最后再分享一句《我的團長我的團》里的一句話:死都不怕,就怕不安逸,命都不要,就要安逸,一起共勉。