LeetCode每日1题--赎金信

简介: LeetCode每日1题--赎金信

前言


算法的重要性不言而喻!区分度高!

现在学习的门槛低了,只有能上网每个人都可以学编程!培训班6个月就可以培养出来能干活的人,你怎么从这些人中脱颖而出?没错!就是学算法,学一些底层和基础的东西。

说的功利点是为了竞争,卷死对手。真心话说就是能提高自己的基础能力,为技术可持续发展做好充分的准备!!!

提前入门学习书籍:CPrimerPlus、大话数据结构

image.png


刷题网站


代码随想录 (programmercarl.com)

leetcode

我是按照代码随想录提供的刷题顺序进行刷题的,大家也可以去刷leetcode最热200道,都可以

刷题嘛,最重要的就是坚持了!!!


画图软件


OneNote

这个要经常用,遇见不懂的流程的话就拿它画一画!


笔记软件


Typoral


题目


解析


image.png

这道题目和我们前面写的242.有效的字母异位词很像,相当于求 字符串a 和 字符串b 是否可以相互组成 ,而这道题目是求 字符串a能否组成字符串b,而不用管字符串b 能不能组成字符串a。

题目有非常重要的两个点:

  • 杂志里面的字母不可重复使用。
  • 说明只有小写字母,这一点很重要

暴力解法

比较容易想到对吧,两次for循环,循环的内容是判断第一个字符串的元素是否存在于第二个字符串,如果存在那么删掉第一个字符串中的元素,最后判断赎金信是否为空即可

为什么要减去a

A的ASCII码是65,字符a到字符z的ACCII是连续的数值,所以字符a - a那么对应的数字就是0,b字符呢?66-65呗,这不就和数组的索引下标对上了吗?

class Solution {
    public boolean canConstruct(String ransomNote, String magazine) {
        // 因为要存放26个英文字母,所以用数组来存储,牺牲空间提高速度
        int[] record = new int[26];
        // 遍历字符串出现的个数,记录到record数组中
        for(char c : magazine.toCharArray()){
            record[c - 'a'] += 1;
        }
        for(char c : ransomNote.toCharArray()){
            record[c - 'a'] -= 1;
        }
        for(int i : record){
            if(i < 0){
                return false;
            }
        }
        return true;
    }
}



相关文章
|
6月前
|
Java C++ Python
leetcode-383:赎金信
leetcode-383:赎金信
45 1
|
6月前
|
Java
383. 赎金信 --力扣 --JAVA
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能c里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。
43 1
|
索引
【Leetcode -383.赎金信 -387.字符串中的第一个唯一字符】
【Leetcode -383.赎金信 -387.字符串中的第一个唯一字符】
41 0
|
5月前
|
存储
力扣经典150题第三十九题:赎金信
力扣经典150题第三十九题:赎金信
28 0
|
6月前
【力扣】383.赎金信
【力扣】383.赎金信
LeetCode150道面试经典题--赎金信(简单)
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。
65 0
|
6月前
|
存储 算法 Java
[Java·算法·简单] LeetCode 383. 赎金信 详细解读
[Java·算法·简单] LeetCode 383. 赎金信 详细解读
55 0
|
6月前
|
算法
六六力扣刷题哈希表之赎金信
六六力扣刷题哈希表之赎金信
33 0
|
算法
代码随想录算法训练营第七天 | LeetCode 454.四数相加II、383. 赎金信、15. 三数之和、18. 四数之和
代码随想录算法训练营第七天 | LeetCode 454.四数相加II、383. 赎金信、15. 三数之和、18. 四数之和
43 0