來刷 LeetCode 吧! 06 383. Ransom Note
LeetCode
題目分析
給兩個字串 ransomNote 、 magazine 。
若 ransomNote 可以由 magazine 中的字母組成,回傳 true,否則回傳 false。
第一直覺(錯誤)
- 使用 for 迴圈從第一個字元開始判斷
- 若還沒抵達 ransomNote 的最後一個字元就發生不相等,代表字元不同,回傳 false
- 若遍歷結束,代表字元皆相等,回傳 true
var canConstruct = function (ransomNote, magazine) { for (let i = 0; i < ransomNote.length; i++) { if (ransomNote[i] !== magazine[i]) return false; } return true; };
為什麼錯?
看了解答才知道:
ransomNote = “aab”
magazine = “baa”
應該回傳 true
如何修正
我們改變一下想法,遍歷 magazine 中的字母,若 ransomNote 有相符的字母,則刪除。
最後若 ransomNote 變為空字串,代表符合題目條件,回傳 true,否則回傳 false。
var canConstruct = function (ransomNote, magazine) { for (const char of magazine) { ransomNote = ransomNote.replace(char, ""); } return !ransomNote; };