java数据结构与算法刷题-----LeetCode524. 通过删除字母匹配到字典里最长单词

手把手教你学 GPU SoC 芯片(9.3)--GPU SOC 功耗和热管理的动态电压和频率调整(DVFS) 通过动态电压和频率调整(DVFS),可以有效地管理GPU SoC的功耗和热管理。合理的DVFS策略不仅可以节省功耗,提高能效,还可以延长设备的使用寿命。 阅读详情
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846

在这里插入图片描述

法一:双指针,具体看代码注释
在这里插入图片描述

class Solution {
    //1. s中删除任意个字符,从左到右,可以完全匹配字典中的某个值,就是我们要找的
    //2. 如果有多个我们要找的,返回最长的
    //3. 如果有多个长度相等的,返回较大的(字母序),通过A.compareTo(B)即可比较A是否比B大
    //4. compareTo有3种值,-1,0,1. -1表示A小于B。0表示相等,1表示A大于B
    public String findLongestWord(String s, List<String> dictionary) {
        String res = "";//最终结果字符串
        for(String item: dictionary){//遍历字典
            int left = 0, right = 0;//双指针,一个指向主字符串s,另一个指向字典中的值item
            while(left<item.length() && right<s.length()){//如果某一个遍历完,就结束
                if(item.charAt(left) == s.charAt(right)) left++;//若匹配成功,item进行下一个比较
                right ++;//无论如何s都需要向下遍历,因为我们可以删除任意个s中字符
            }
            if(left == item.length()){//如果item完全被匹配,就是我们要找的
                //然后判断是否比上一个符合条件的更长,或者长度相等
                if(item.length()>res.length() || //若它的长度更长,直接让res执行它
                    (item.length() == res.length() && item.compareTo(res) <0))//若长度相等,判断是否item字母序更小
                    res = item;
            }
        }
        return res;
    }
}

法二:动态规划(TODO)
在这里插入图片描述

  1. DP数组及下标含义
  2. 递推公式
  3. dp数组初始化
  4. 遍历顺序
  5. dp数组打印
class Solution {
    public String findLongestWord(String s, List<String> dictionary) {
        int m = s.length();
        int[][] f = new int[m + 1][26];
        Arrays.fill(f[m], m);

        for (int i = m - 1; i >= 0; --i) {
            for (int j = 0; j < 26; ++j) {
                if (s.charAt(i) == (char) ('a' + j)) {
                    f[i][j] = i;
                } else {
                    f[i][j] = f[i + 1][j];
                }
            }
        }
        String res = "";
        for (String t : dictionary) {
            boolean match = true;
            int j = 0;
            for (int i = 0; i < t.length(); ++i) {
                if (f[j][t.charAt(i) - 'a'] == m) {
                    match = false;
                    break;
                }
                j = f[j][t.charAt(i) - 'a'] + 1;
            }
            if (match) {
                if (t.length() > res.length() ||  (t.length() == res.length() && t.compareTo(res) < 0)) {
                    res = t;
                }
            }
        }
        return res;
    }
}

刷题一定要坚持,总结套路,不单单要把题做出来,要举一反三,也要参考别人的思路,学习别人解题的优点,找出你觉得可以优化的点。

  1. 单链表解题思路:双指针、快慢指针、反转链表、预先指针
  1. 双指针:对于单链表而言,可以方便的让我们遍历结点,并做一些额外的事
  2. 快慢指针:常用于找链表中点,找循环链表的循环点,一般快指针每次移动两个结点,慢指针每次移动一个结点。
  3. 反转链表:通常有些题,将链表反转后会更好做,一般选用三指针迭代法,递归的空间复杂度有点高
  4. 预先指针:常用于找结点,比如找倒数第3个结点,那么定义两个指针,第一个指针先移动3个结点,然后两个指针一起遍历,当第一个指针遍历完成,第二个指针指向的结点就是要找的结点
  1. 数组解题思路:双指针、三指针,下标标记
  1. 双指针:多用于减少时间复杂度,快速遍历数组
  2. 三指针:多用于二分查找,分为中间指针,左和右指针
  3. 下标标记:常用于在数组范围内找东西,而不想使用额外的空间的情况,比如找数组长度为n,元素取值范围为[1,n]的数组中没有出现的数字,遍历每个元素,然后将对应下标位置的元素变为负数或者超出[1,n]范围的正数,最后没有发生变化的元素,就是缺少的值。
高通平台开发系列讲解(USB篇)MBIM协议详解 📢本文主要介绍高通平台USB网卡MBIM协议。 阅读详情

相关推荐

Carla-编译CarlaUE4提示HoloLens.Automation项目缺少Windows程序集?

编译CarlaUE4提示HoloLens.Automation项目缺少Windows程序集?不妨看看这个!

DSK_981029的博客 2573

Java实现 LeetCode 524 通过删除字母匹配到字典里最长单词(又是一道语文题)

524. 通过删除字母匹配到字典里最长单词 给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不存在,则返回空字符串。 示例 1: 输入: s = “abpcplea”, d = [“ale”,“apple”,“monkey”,“plea”] 输出: “apple” 示例 2: 输...

南 墙 1万+

STM32F103C8T6用官方bootloader实现IAP升级操作方法

在使用STM32F103C8T6单片机IAP功能时,可以自己写bootloader程序,也可以使用官方bootloader文件。下面说一下使用官方bootloader的使用方法。 首先下载官方bootloader文件 目前使用的是这个版本,打开文件夹,选择适合自己编译器的工程。 目前使用的是keil,所以打开MDK-ARM文件夹 打开IAP工程 打开后根据自己的单片机型号,对工程进行简单的修...

HXYDJ的博客 1万+

LeetCode 524 通过删除字母匹配到字典里最长单词

时空平衡:线性时间复杂度,常数空间,适合大规模数据。逻辑简洁:双指针法直观易懂,避免复杂数据结构。这道题教会我们如何用双指针的 “舞蹈” 优雅地检查子序列,同时用优先级规则筛选最优解。就像整理书架:先按高度(长度)排序,再按书名(字母序)排列,最终找到最合适的 “那本书”。下次遇到字符串匹配问题时,记住双指针的魔力:让字符在遍历中自然匹配,让优先级在比较中浮出水面。代码的简洁,正是算法之美的最佳注脚!📜✨。

qq_64604732的博客 1074

【硬件开源实战】STM32G070RBT6开发板从设计到避坑全解析

本文全面解析了STM32G070RBT6开发板从硬件设计到避坑的实战经验。详细介绍了电源设计、时钟电路、PCB布局等关键环节,分享了成本控制、焊接测试、软件开发和外设驱动的实用技巧,帮助开发者高效完成项目开发。

weixin_26897585的博客 237

DM达梦数据库远程客户端工具连接6001错误,disql可以正常连接

DM达梦数据库远程客户端工具连接6001错误,disql可以正常连接

weixin_45906061的博客 4510

Leetcode524 通过删除字母匹配到字典里最长单词

Leetcode 524 力扣 题目: 给你一个字符串 s 和一个字符串数组 dictionary ,找出并返回dictionary 中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。 如果答案不止一个,返回长度最长且字母序最小的字符串。如果答案不存在,则返回空字符串。 示例: 题解: 方法:双指针 分析:双指针方法,主要可以用于遍历数组,协同工作:转载他人github整理相关题目 CS-Notes/Leetcode 题解 - 双指针.md at master · C..

Utopia 4623

AI驱动的材料科学:从分子设计到性能预测

AI驱动的材料科学:从分子设计到性能预测 关键词: 材料科学 人工智能 分子设计 性能预测 机器学习 深度学习 摘要:

AI天才研究院 2187

Leetcode 524. 通过删除字母匹配到字典里最长单词

Leetcode 524. 通过删除字母匹配到字典里最长单词524. 通过删除字母匹配到字典里最长单词 给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不存在,则返回空字符串。 示例 1: 输入: s = “abpcplea”, d = [“ale”,“apple”,“monkey”,“plea”] 输出: “apple” 示例 2: 输入: s = “abpcplea”, d = [“a

EIUC_Thread的博客 231

Android 12,通过JNI写framebuff实现白板书写加速

Android 书写加速

448313096@qq.com 1204

在Windows10上安装WSL2

WSL2是微软提供的Windows子系统,允许在Windows 10和11上运行Linux环境,提供更好的性能和兼容性。安装WSL2需要启用WSL功能、更新系统、安装WSL2内核,并设置为默认版本。之后,可以通过Microsoft Store安装Linux发行版,并使用WSL命令启动和管理它们。

howard2005的专栏 5942

524. 通过删除字母匹配到字典里最长单词

package test; import java.util.*; /** * * 524. 通过删除字母匹配到字典里最长单词 * 给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。 * 如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不存在,则返回空字符串。 * * 示例 1: * * 输入: * s...

m0_37648645的博客 143

YOLOv11的扩散模型去噪预处理-(在推理前对低质量图像进行增强)

摘要: 扩散模型与YOLOv11的结合有效提升了复杂场景下的目标检测性能。针对低质量图像(如噪声、低光照)导致YOLOv11特征提取退化的问题,研究提出了一种基于条件扩散模型的预处理方法。通过语义引导的渐进式去噪,在保留关键检测特征的同时,显著改善了图像质量。技术核心包括:1)利用YOLOv11浅层特征作为条件输入;2)交叉注意力机制实现任务感知去噪;3)知识蒸馏与潜空间扩散加速推理。实验表明,该方法使mAP50提升19%,在15步内达到传统百步去噪效果,平衡了精度与实时性需求,为鲁棒性目标检测提供了新思路

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 877

LeetCode - 双指针 - 524. 通过删除字母匹配到字典里最长单词

524. 通过删除字母匹配到字典里最长单词 给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不存在,则返回空字符串 示例 1: 输入: s = “abpcplea”, d = [“ale”,“apple”,“monkey”,“plea”] 输出: “apple” 示例 2: 输入: s = “abpcplea”, d = [“a”,“b”,“c”] 输出: “a” 说明: 所

-happy 的博客 228

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

​LeetCode刷题实战524:通过删除字母匹配到字典里最长单词

算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !...

程序IT圈 508

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

LeetCode- 524. 通过删除字母匹配到字典里最长单词

/**524. 通过删除字母匹配到字典里最长单词 * @author 作者 Your-Name: * @version 创建时间:2020年2月21日 上午10:55:43 * 给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不存在,则返回空字符串。 示例 1: 输入:...

l769440473的博客 284

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Leetcode刷题100天—524. 通过删除字母匹配到字典里最长单词(双指针)—day38

前言: 作者:神的孩子在歌唱 大家好,我叫运智 524. 通过删除字母匹配到字典里最长单词 难度中等192收藏分享切换为英文接收动态反馈 给你一个字符串 s 和一个字符串数组 dictionary 作为字典,找出并返回字典中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。 如果答案不止一个,返回长度最长且字典序最小的字符串。如果答案不存在,则返回空字符串。 示例 1: 输入:s = "abpcplea", dictionary = ["ale","apple","monkey","plea"

智的博客 2076

LeetCode题练习与总结:通过删除字母匹配到字典里最长单词--524

本文详细介绍了如何解决给定字符串和字典数组,找出最长子序列字符串的问题,包括解题思路、具体代码实现、时间复杂度分析及总结知识点,为理解该问题提供全面指导。

一直学习永不止步 1510

Leetcode(java,python题解):524.通过删除字母匹配到字典里的最长单词

524.通过删除字母匹配到字典里的最长单词 题目描述 Leetcode: https://leetcode-cn.com/problems/longest-word-in-dictionary-through-deleting/ 给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不...

_淡泊宁静的博客 284

leetcode记录-524-通过删除字母匹配到字典里最长单词-双指针

524.通过删除字母匹配到字典里最长单词 思路 理解题意是一大难点。。。对于list中的字符串,如果可以由s删除一些字符得到,那么这个字符串初步符合标准,把他和str(初始为空)的比较,如果其长度更长或者长度相等下字母序小,则更新str为当前字符串。 代码 class Solution { public String findLongestWord(String s, List<String> dictionary) { String str=""; f

Slay__的博客 5826

【LeetCode524】【双指针】通过删除字母匹配到字典里最长单词

题目 给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不存在,则返回空字符串。 示例 1: 输入: s = “abpcplea”, d = [“ale”,“apple”,“monkey”,“plea”] 输出: “apple” 示例 2: 输入: s = “abpcplea”, ...

qq_29295351的博客 180

通过删除字母匹配到字典里最长单词

通过删除字符串匹配到字典里最长单词

weixin_43412762的博客 294

​【LeetCode】524. 通过删除字母匹配到字典里最长单词​(Java)

题目描述:给你一个字符串 s 和一个字符串数组 dictionary ,找出并返回 dictionary 中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。如果答案不止一个,返回长度最长且字母序最小的字符串。如果答案不存在,则返回空字符串。

weixin_53235104的博客 364
上一篇: java数据结构与算法刷题-----LeetCode 680. 验证回文串 II
下一篇: java数据结构与算法刷题-----LeetCode509. 斐波那契数
ydenergy_殷志鹏
博客等级 码龄7年 5886粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ydenergy_殷志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值