赎金信

给你两个字符串: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 由小写英文字母组成

代码:

 

 1 class Solution {
 2 public:
 3     bool canConstruct(string ransomNote, string magazine) {
 4         int r = ransomNote.size();
 5         int m = magazine.size();
 6         int hash1[26],hash2[26];
 7         for (int i = 0; i < 26; i++)
 8         {
 9             hash1[i] = 0;
10             hash2[i] = 0;
11         }
12         for(int i = 0;i<r;i++)
13         {
14             hash1[ransomNote[i]-'a']++;
15         }
16         for(int i = 0;i<m;i++)
17         {
18             hash2[magazine[i]-'a']++;
19         }
20         for(int i = 0;i<26;i++)
21         {
22             if(hash2[i]<hash1[i])
23             return false;
24         }
25         return true;
26     }
27 };

学了一下哈希,本来想挨个查找的,但是分情况分迷糊了,100+个测试案例只通过35个😭

posted @ 2022-07-14 23:22  顾夜  阅读(42)  评论(0)    收藏  举报