首页 > 其他分享 >力扣-赎金信

力扣-赎金信

时间:2023-09-24 16:46:28浏览次数:32  
标签:ransom 26 力扣 str 字符串 赎金 true

1.问题

给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成。如果可以构成,返回 true ;否则返回 false。

(题目说明:为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思。杂志字符串中的每个字符只能在赎金信字符串中使用一次。)

注意:

你可以假设两个字符串均只含有小写字母。

canConstruct("a", "b") -> false
canConstruct("aa", "ab") -> false
canConstruct("aa", "aab") -> true

2.说明

输入说明:

分别输入两行字符串,第一行代表ransom字符串,第二行代表magzine字符串

输出说明:

输出true或者fals

3.范例

输入范例:

aa

aab

输出范例:

true

4.思路

根据题目明确字符串有26个小写字母表示,即可适用数组的哈希表进行解题,使用str[26]数组记录magzine字符串中字母出现的次数,然后再对ransom字符串进行遍历,若ransom[ i ]在str[ ransom[i] -'a' ]中存在,则str[ ransom[i] -'a' ]--,表示在str数组中该字母已使用过一次,当str[ ransom[i] -'a' ] < 0 时,则magzine字符不足组成ransom,返回false

5.代码

#include <string>
#include <stdio.h>
#include <iostream>
using namespace std;
class Solution
{
public:
//赎金信
    bool canConstruct(string ransomNode,string magazine)
    {
        int str[26]={0};
        if(ransomNode.length()>magazine.length())
            return false;
        for(int i=0;i<magazine.length();i++)
        {
            str[magazine[i]-'a']++;
        }
        for(int i=0;i<ransomNode.length();i++)
        {
            str[ransomNode[i]-'a']--;
            if(str[ransomNode[i]-'a']<0)
                return false;
        }
        return true;
    }
};
int main()
{
    //赎金信
    string ransom,magazine;
    getline(cin,ransom);
    getline(cin,magazine);
    bool res=Solution().canConstruct(ransom,magazine);
    cout<<(res?"true":"false")<<endl;
    return 0;
}

 

标签:ransom,26,力扣,str,字符串,赎金,true
From: https://www.cnblogs.com/ohye/p/17726163.html

相关文章

  • 力扣---146. LRU 缓存
    请你设计并实现一个满足  LRU(最近最少使用)缓存 约束的数据结构。实现 LRUCache 类:LRUCache(intcapacity) 以 正整数 作为容量 capacity 初始化LRU缓存intget(intkey) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。voidput(intkey,......
  • 力扣-链表组件
    1.问题给定链表头结点head,该链表上的每个结点都有一个唯一的整型值。同时给定列表G,该列表是上述链表中整型值的一个子集。返回列表G中组件的个数,这里对组件的定义为:链表中一段极长连续结点的值(该值必须在列表G中)构成的集合。极长的含义是:这段连续结点的前面或后面结点不......
  • 力扣练习题
    1#include<bits/stdc++.h>2#defineMAXSIZE1003usingnamespacestd;4typedefstruct{5char*base;6char*top;7intstactsize;8}sqstack;9voidinitstack(sqstack&s){10s.base=newchar[MAXSIZE];11if(!s.ba......
  • 力扣6.N 字形变换(压缩矩阵)
    将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z字形排列。比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:PAHNAPLSIIGYIR之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。请......
  • 力扣20.有效的括号
    给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。 示例1:输入:s="()"输出:true 示例 2:输入:s="()[]{}"......
  • 力扣14.最长公共前缀
    编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。 示例1:输入:strs=["flower","flow","flight"]输出:"fl" 示例2:输入:strs=["dog","racecar","car"]输出:""解释:输入不存在公共前缀。 ......
  • 递归例题 力扣39 组合总数
    给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一......
  • 力扣1.两数之和
    给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。 示例1:输入:nums=[2,......
  • 力扣上一道抽到英文原题现场还没写出来的easy难度的mid题
    646.MaximumLengthofPairChain 很难绷,今天去华东理工面试抽到了这个英文原题,虽然我也没写过,但是区间操作的题目大多都需要排序预处理,想到了排序预处理,也想到了第二个判断应该怎么写,第一个判断当时脑子一片空白,然后就一直卡在那,最后连最基本的思路都没说就进入了下一个环......
  • 力扣-不同路径1
    1.问题一个机器人位于一个mxn网格的左上角(起始点在下图中标记为“Start”)。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如,上图是一个7x3的网格。有多少可能的路径?示例1:输入:m=3,......