DOJO004

  • Dashool 創辦人
  • 喜歡調酒
  • Rails、Nextjs、TypeScript

來刷 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;
};

版權所有 © 2023 DOJO004

Deployed on Zeabur