首页 > 编程语言 >【教3妹学编程-算法题】赎金信

【教3妹学编程-算法题】赎金信

时间:2024-01-07 20:32:57浏览次数:32  
标签:ransomNote cnt false 英文字母 编程 妹学 magazine 字符串 赎金

【教3妹学编程-算法题】赎金信_字符统计

3妹:“太阳当空照,花儿对我笑,小鸟说早早早,你为什么背上炸药包”
2哥 :3妹,什么事呀这么开森。
3妹:2哥你看今天的天气多好啊,最近一周都是大晴天,艳阳高照
2哥:是啊,天气不冷不热的,很适合生活
3妹:据说南方的小土豆都跑到北方滑雪了,哈哈哈哈
2哥:泼水成冰好玩是好玩,但是一定要注意防寒哦,看新闻都有人冻伤了。
3妹:是啊,还是待在室内比较好
2哥:给你出了一道题发你微信里了, 上班通勤的路上记得看一下,回来问你答案~

【教3妹学编程-算法题】赎金信_java代码_02

3妹:知道啦,难不倒我!


 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 <= 10^5
ransomNote 和 magazine 由小写英文字母组成

 2思路: 

【教3妹学编程-算法题】赎金信_java代码_03

字符统计,
题目要求使用字符串 magazine 中的字符来构建新的字符串 ransomNote,且ransomNote中的每个字符只能使用一次,只需要满足字符串 magazine中的每个英文字母 (’a’-’z’) 的统计次数都大于等于 ransomNote中相同字母的统计次数即可。

如果字符串 magazine的长度小于字符串 ransomNote的长度,则我们可以肯定 magazine无法构成 ransomNote,此时直接返回 false。
首先统计 magazine中每个英文字母 a 的次数 cnt[a],再遍历统计 ransomNote中每个英文字母的次数,如果发现 ransomNote 中存在某个英文字母 c 的统计次数大于 magazine 中该字母统计次数 cnt[c],则此时我们直接返回 false。

 3java代码: 


class Solution {
    public boolean canConstruct(String ransomNote, String magazine) {
        if (ransomNote.length() > magazine.length()) {
            return false;
        }
        int[] cnt = new int[26];
        for (char c : magazine.toCharArray()) {
            cnt[c - 'a']++;
        }
        for (char c : ransomNote.toCharArray()) {
            cnt[c - 'a']--;
            if(cnt[c - 'a'] < 0) {
                return false;
            }
        }
        return true;
    }
}


标签:ransomNote,cnt,false,英文字母,编程,妹学,magazine,字符串,赎金
From: https://blog.51cto.com/u_6813689/9134641

相关文章

  • “华为杯”杭州电子科技大学2023新生编程大赛 1005
    树-HDU7406$xordist(i,j)=xordist(i,k)\oplusxordist(k,j)$在数轴和树上都是成立的那么原式变成$\sum_{i=l}^{r}xordist(i,k)\oplusxordist(k,j)$这里k指定为1号点就变成了一个很简单的拆位考虑贡献的问题了#include<bits/stdc++.h>usingnamespacestd;#de......
  • 书籍推荐-《机器人编程:使用树莓派3和Python构建和控制自主机器人》
    以下内容来自公众号【一点人工一点智能】编辑:东岸因为@一点人工一点智能书籍:LearnRoboticsProgramming:BuildandcontrolautonomousrobotsusingRaspberryPi3andPython作者:DannyStaple出版:PacktPublishing01书籍介绍我们生活在一个最复杂或重复的任务都是自动化......
  • Python教程(20)——python面向对象编程基本概念
    面向对象(Object-oriented)是一种常用的程序设计思想,它以对象作为程序的基本单元,将数据和操作封装在一起,通过对象之间的交互来实现程序的功能。在面向对象编程中,将问题抽象成对象,而对象可以拥有属性(数据)和方法(操作)。对象可以被看作是现实世界中的实体或概念,具有某种特定的状态和行......
  • 【教3妹学编程-算法题】队列中可以看到的人数
    3妹:“太阳当空照,花儿对我笑,小鸟说早早早,你为什么背上炸药包”2哥 :3妹,什么事呀这么开森。3妹:2哥你看今天的天气多好啊,最近一周都是大晴天,艳阳高照2哥:是啊,天气不冷不热的,很适合生活3妹:据说南方的小土豆都跑到北方滑雪了,哈哈哈哈2哥:泼水成冰好玩是好玩,但是一定要注意防寒哦,看新闻都......
  • Python编程1——反转一个3位整数
    反转一个只有3位数的整数。输入789,反转后输出987.代码如下:Reverse.pyclassSolution:#参数Number:一个3位数字#返回值:反转后的数字defreverseInteger(self,number):h=int(number/100)t=int(number%100/10)z=int(number......
  • c++ 期末编程题
    当然,我可以帮你整理一下你提供的C++代码,并为每个代码片段添加相应的标题。请看下面的整理:1.计算两点之间的距离#include<iostream>#include<cmath>usingnamespacestd;intmain(){intx1,x2,y1,y2;cout<<"请输入x1,x2,y1,y2的值";cin>>x1>>x2>>......
  • python学习----编程题02
    题目:企业发放的奖金根据利润提成。利润(0)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成540万60万之间时高于40万元的部分,可提成3%60万到100万之间时,高于60......
  • (五十二)C#编程基础复习——C#点阵列
    在C#中,点阵列类用来管理一个紧凑型的位值数组,数组中的值均为布尔类型,其中true(1)表示此位为开启,false(0)表示此位为关闭。当你需要存储位(英文名“bit”数据存储的最小单位,也可称为比特),但事先又不知道具体位数时,就可以使用点阵列。当需要访问点阵列中的元素时,可以使用整型索引从点阵......
  • (五十一)C#编程基础复习——C#队列
    在C#中,队列类与堆栈类类似,它代表了一个先进先出的对象结合,当你需要对项目进行先进先出访问时,则可以使用队列。向队列中添加元素称为入队,从堆栈中移除元素称为出队。一、队列类中的属性下表中列出了队列类中的一些常用属性二、队列类中的方法下表列出了队列类的一些常用方法......
  • 面向对象编程(上)
    面向对象内容的三条主线1.Java类及类的成员:属性、方法、构造器;代码块、内部类2.面向对象的三大特征:封装性、继承性、多态性、(抽象性)3.其它关键字:this、super、static、final、abstract、interface、package、import等面向对象的思想概述Java语言的基本元素:类和对象类......