哈希表-救赎金

Leetcode: https://leetcode.cn/problems/ransom-note/?envType=study-plan-v2&envId=top-interview-150

给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。

如果可以,返回 true ;否则返回 false 。

magazine 中的每个字符只能在 ransomNote 中使用一次。

示例 1:

输入:ransomNote = "a", magazine = "b"
输出:false

示例 2:

输入:ransomNote = "aa", magazine = "ab"
输出:false

示例 3:

输入:ransomNote = "aa", magazine = "aab"
输出:true

提示:

  • 1 <= ransomNote.length, magazine.length <= 105
  • ransomNote 和 magazine 由小写英文字母组成

考点:哈希表

思路:哈希表,ransomNote的hash值+1,magazine的hash值-1,遍历哈希,如果存在大于0的情况则代表false。

bool canConstruct(char * ransomNote, char * magazine){
    int r = strlen(ransomNote);
    int m = strlen(magazine);

    if (r > m) {
        return false;
    }

    int ans[26] = {0};

    for (int i = 0; i < m; i++) {
        if (i < r) {
            ans[ransomNote[i] - 'a']++;
        } 
        ans[magazine[i] - 'a']--;
    }
    for (int i = 0; i < 26; i++) {
        if (ans[i] > 0) {
            return false;
        }
    }
    return true;
}

你可能感兴趣的:(华为OD机考真题(C,C++,python),哈希算法,算法)