383. Ransom Note
Easy
- 題目描述
- 解答
Description
Given two strings ransomNote and magazine, return true if ransomNote can be constructed by using the letters from magazine and false otherwise.
Each letter in magazine can only be used once in ransomNote.
Example 1:
Input: ransomNote = "a", magazine = "b"
Output: false
Example 2:
Input: ransomNote = "aa", magazine = "ab"
Output: false
Example 3:
Input: ransomNote = "aa", magazine = "aab"
Output: true
Constraints:
1 <= ransomNote.length, magazine.length <= 105
ransomNote and magazine consist of lowercase English letters.
Solution
JavaScript
/**
* @param {string} ransomNote
* @param {string} magazine
* @return {boolean}
*/
var canConstruct = function (ransomNote, magazine) {
let counter = {};
for (let i = 0; i < magazine.length; i++) {
if (counter[magazine[i]]) {
counter[magazine[i]]++;
} else {
counter[magazine[i]] = 1;
}
}
for (let i = 0; i < ransomNote.length; i++) {
if (counter[ransomNote[i]]) {
counter[ransomNote[i]]--;
} else {
return false;
}
}
return true;
};
解題思路
先定義一個 Counter,並記錄 magazine 中出現過的單字頻率,接著使用 Counter 當基底逐一減去 ransomNote 的單字,能成功的話就是 true,有一個字不存在就是 false 。
心得
練習 Counter 的基本題,感覺可以再最佳化寫法!
然後這題的變數叫做 magazine + 題目名稱叫做 Ransom Note(勒索信),就4用雜誌單字拼拼湊湊來讓收到的認不出筆跡的那個