哈希-力扣383.赎金信

哈希-力扣383.赎金信_第1张图片

题目

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

思路

本题依然是对字母类型的字符进行查找,因此范围确定,并且不需排序和去重,我们采用数组作为哈希表再合适不过,通过数组来查找是否magazine中是否存在ransomNote中想要的,如果有对应减一1如果发现magazine中没有所需,那么返回false,遍历到最后如果没有一个等于0,那么就说明magazine中有所需的所有字符,下面根据笔者的代码进行理解和对数组哈希的复习。

代码实现

class Solution {
public:
    bool canConstruct(string ransomNote, string magazine) {
        int a[26]={0};//计数器
		for(char ch:magazine){
			a[ch-'a']++;//对magazine的字符进行计数
		}
		for(char ch:ransomNote){
			if(a[ch-'a']){
				a[ch-'a']--;//查找是否存在该字符
			}
			else return false;//找不到就说明无法完全满足
		} 
		return true;//遍历所有如果全部满足,那么返回真
    }
};

反思

这道题再次带我们复习了哈希数组的用法,在范围有限的情况下,很显然,数组的使用能大大减少我们所需要的时间复杂度和空间复杂度,为我们哈希表的选择和使用,加深了理解和认识。

尾声

笔者希望通过这几道题,让大家跟随笔者,共同对哈希算法有更深的认识和理解,如果觉得笔者写的还不错的话,不要忘了留下您的点赞关注和收藏哦~

哈希-力扣383.赎金信_第2张图片

你可能感兴趣的:(哈希算法,leetcode,算法)