首页 > 其他分享 >【LeetCode】383_赎金信_C

【LeetCode】383_赎金信_C

时间:2024-03-02 21:56:05浏览次数:20  
标签:ransomNote false 示例 length magazine 383 赎金 LeetCode hash

题目描述

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

解题总结

  • 题意理解

判断 ransomNote 能不能由 magazine 里面的字符构成

由此推出,ransomNote 的长度一定要小于等于 magazine 的长度

其次,本题与 KMP 算法无关,如果说 ransomNote 是"abc",而 magazine 是"abbc",这也是符合题意的

  • 解题思路

由于两个字符串都是由小写字母组成的,所以可以考虑构成一个长度为26的哈希表,将字符串中的各个字母存储在表的相应位置上,每存入一个 magazine 字符串上的值,使表中对应位置上存储的数据加一,存入 ransomNote 则减一,最后遍历哈希表,如果哈希表中的每个数据都大于等于0,则说明 ransomNote 由 magazine 中的字符构成,反之则不然

代码实现

bool canConstruct(char* ransomNote, char* magazine) {
    int r_length = strlen(ransomNote);
    int m_length = strlen(magazine);
    if(r_length > m_length)
    {
        return false;
    }
    else
    {
        int hash[26] = { 0 };
        int i = 0;
        for (i = 0; i < m_length; i++)
        {
            hash[magazine[i] - 'a']++;	//magazine[i] - 'a'得到字符的位置
        }
        for (i = 0; i < r_length; i++)
        {
            hash[ransomNote[i] - 'a']--;
        }
        for(i = 0; i < 26; i++)
        {
            if(hash[i] < 0)
            {
                return false;
            }
        }
        return true;
    }
}

标签:ransomNote,false,示例,length,magazine,383,赎金,LeetCode,hash
From: https://www.cnblogs.com/changbaiqiusha/p/18049299

相关文章

  • CF1383A String Transformation 1 题解
    若某一位\(i\)上\(A_i>B_i\),则显然无解。否则,建立并查集,然后遍历字符串,若\(A_i,B_i\)不在一个集合就合并\(A_i\)与\(B_i\),直到只剩下一个集合,此时的合并总次数即为答案。为什么呢?因为将\(A_i,B_i\)合并的操作可以视为等价于将以\(A_i\)开头的连续若干个相同字符均改......
  • 代码随想录算法训练营day11 | leetcode 20. 有效的括号、1047. 删除字符串中的所有相
    目录题目链接:20.有效的括号-简单题目链接:1047.删除字符串中的所有相邻重复项-简单题目链接:150.逆波兰表达式求值-中等题目链接:20.有效的括号-简单题目描述:给定一个只包括'(',')','{','}','[',']'的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右......
  • 【LeetCode】876_链表的中间结点_C
    题目描述给你单链表的头结点head,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。https://leetcode.cn/problems/middle-of-the-linked-list/description/示例提示:链表的结点数范围是[1,100]1<=Node.val<=100解题思路思路一遍历链......
  • 代码随想录算法训练营day10 | leetcode 232. 用栈实现队列、225. 用队列实现栈
    目录题目链接:232.用栈实现队列-简单题目链接:225.用队列实现栈-简单题目链接:232.用栈实现队列-简单题目描述:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现MyQueue类:voidpush(intx)将元素x推到队列的末尾intp......
  • LeetCode 2345. Finding the Number of Visible Mountains
    原题链接在这里:https://leetcode.com/problems/finding-the-number-of-visible-mountains/description/题目:Youaregivena 0-indexed 2Dintegerarray peaks where peaks[i]=[xi,yi] statesthatmountain i hasapeakatcoordinates (xi,yi).Amountaincan......
  • [LeetCode] 2864. Maximum Odd Binary Number
    Youaregivenabinarystringsthatcontainsatleastone'1'.Youhavetorearrangethebitsinsuchawaythattheresultingbinarynumberisthemaximumoddbinarynumberthatcanbecreatedfromthiscombination.Returnastringrepresentin......
  • 代码随想录算法训练营day09 | leetcode 28. 找出字符串中第一个匹配项的下标、459. 重
    目录题目链接:28.找出字符串中第一个匹配项的下标-简单题目链接:459.重复的子字符串-简单题目链接:28.找出字符串中第一个匹配项的下标-简单题目描述:给你两个字符串haystack和needle,请你在haystack字符串中找出needle字符串的第一个匹配项的下标(下标从0开始)。如果ne......
  • Leetcode刷题第十五天-链表
    203:移除链表元素链接:203.移除链表元素-力扣(LeetCode)#Definitionforsingly-linkedlist.#classListNode:#def__init__(self,val=0,next=None):#self.val=val#self.next=nextclassSolution:defremoveElements(self,head:Op......
  • 【leetcode】412_FizzBuzz_C
    题目描述给你一个整数n,找出从1到n各个整数的FizzBuzz表示,并用字符串数组answer(下标从1开始)返回结果,其中:answer[i]=="FizzBuzz"如果i同时是3和5的倍数。answer[i]=="Fizz"如果i是3的倍数。answer[i]=="Buzz"如果i是5的倍数。answer[i]==......
  • CF383C Propagating tree 题解
    题目链接:CF或者洛谷比较朴素的题,注意到这个涉及到子树变化,我们考虑优先处理出\(dfs\)序,方便处理。注意到第一个问题较为繁琐,我们着重解决下第一个问题。在树上问题,我们这种间隔点常常使用\(deep\)进行区分。根的\(deep\)为奇数,那么对自己子树范围内的奇数\(deep\)......