383. Ransom Note
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 <= 1 0 5 10^5 105
- ransomNote and magazine consist of lowercase English letters.
From: LeetCode
Link: 383. Ransom Note
Solution:
Ideas:
In this function, magazineLetters is an array of 26 integers (for each letter in the English alphabet), initialized to 0. We first count the frequency of each letter in magazine. Then, for each letter in ransomNote, we check if it exists in magazine (by checking magazineLetters). If it exists, we decrement its count; otherwise, we return false. If all letters in ransomNote are successfully found in magazine, we return true.
Code:
c
bool canConstruct(char* ransomNote, char* magazine) {
int magazineLetters[26] = {0}; // Array to store the frequency of each letter in magazine
// Count the frequency of each letter in magazine
for (int i = 0; magazine[i] != '\0'; i++) {
magazineLetters[magazine[i] - 'a']++;
}
// Check if each letter in ransomNote can be constructed from magazine
for (int i = 0; ransomNote[i] != '\0'; i++) {
if (magazineLetters[ransomNote[i] - 'a'] > 0) {
magazineLetters[ransomNote[i] - 'a']--; // Use the letter and decrement its count
} else {
return false; // If a letter in ransomNote is not found in magazine, return false
}
}
return true; // All letters in ransomNote are found in magazine
}