码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • leetcode 383. Ransom Note(赎金票据)


    Given two strings ransomNote and magazine, return true if ransomNote can be constructed by using the letters from magazine and false otherwise.

    Each letter in magazine can only be used once in ransomNote.

    Example 1:

    Input: ransomNote = “a”, magazine = “b”
    Output: false
    Example 2:

    Input: ransomNote = “aa”, magazine = “ab”
    Output: false
    Example 3:

    Input: ransomNote = “aa”, magazine = “aab”
    Output: true

    题目是赎金,但是好像和赎金也没啥关系,就是字符串。
    ransomNote中的字母要由magazine中的字母组成。
    magazine中每个字母只能用一次。

    思路:

    说白了就是判断ransomNote是不是magazine的子串,即由magazine中的字母组成,不限制顺序。
    但是magazine中每个字母只能用一次。

    英文小写字母总共就26个,只要统计每个字母出现的次数,
    ransomNote中每个字母出现的次数只要小于magazine中对应字母的次数,就为true.

    public boolean canConstruct(String ransomNote, String magazine) {
        int nr = ransomNote.length();
        int nm = magazine.length();
        int n = Math.max(nr, nm);
        int[] cntr = new int[26];
        int[] cntm = new int[26];
        
        for(int i = 0; i < n; i ++) {
            if(i < nr) cntr[ransomNote.charAt(i)-'a'] ++;
            if(i < nm) cntm[magazine.charAt(i)-'a'] ++;
        }
        
        for(int i = 0; i < 26; i++) {
            if(cntr[i] > cntm[i]) return false;
        }
        return true;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    还有一种方法,不统计次数,直接依次查找,找不到就返回false.
    由于magazine中每个字母只能用一次,一旦这个字母用过就不能再用,假设这个字母的index为 i,
    下次再找这个字母,只能从i + 1开始找。

    保存每个字母当前找到的index, 下次从index + 1开始找这个字母。

    public boolean canConstruct(String ransomNote, String magazine) {
        int[] startIdx = new int[26];
        
        for(char cur : ransomNote.toCharArray()) {
            int index = magazine.indexOf(cur, startIdx[cur - 'a']);
            if(index == -1) return false;
            startIdx[cur-'a'] = index+1;
        }
        return true;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    CNN RNN DNN transformer 区别以及音频信号处理适合方式
    java 编译 引用 jar 包进行编译和执行编译后的class文件
    Kafka消息队列大数据实战教程-第三篇(Kafka分区和副本的创建)
    一个使用AndroidStudio实现的简单逆波兰表达式计算求值的App,算是安卓App入门练手项目吧
    【计算机网络学习之路】TCP socket编程
    前端Vue3+element-plus表单输入框实现Cron表达式校验
    java版Spring Cloud之Spark 离线开发框架设计与实现
    Docker容器-Consul部署
    超简单教你用Python克隆声音(以卷福为例)
    JavaScript-Obfuscator4.0.0字符串阵列化Bug及修复方法
  • 原文地址:https://blog.csdn.net/level_code/article/details/126508560
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号