leetcode 每日一题 2024年01月09日 字符串中的额外字符

题目

字符串中的额外字符

给你一个下标从 0 开始的字符串 s 和一个单词字典 dictionary 。你需要将 s 分割成若干个 互不重叠 的子字符串,每个子字符串都在 dictionary 中出现过。s 中可能会有一些 额外的字符 不在任何子字符串中。

请你采取最优策略分割 s ,使剩下的字符 最少

示例 1:

输入:s = "leetscode", dictionary = ["leet","code","leetcode"]
输出:1
解释:将 s 分成两个子字符串:下标从 0 到 3 的 "leet" 和下标从 5 到 8 的 "code" 。只有 1 个字符没有使用(下标为 4),所以我们返回 1 。

示例 2:

输入:s = "sayhelloworld", dictionary = ["hello","world"]
输出:3
解释:将 s 分成两个子字符串:下标从 3 到 7 的 "hello" 和下标从 8 到 12 的 "world" 。下标为 0 ,1 和 2 的字符没有使用,所以我们返回 3 。

提示:

  • 1 <= s.length <= 50
  • 1 <= dictionary.length <= 50
  • 1 <= dictionary[i].length <= 50
  • dictionary[i]s 只包含小写英文字母。
  • dictionary 中的单词互不相同。

提示 1

Can we use Dynamic Programming here?

提示2

Define DP[i] as the min extra character if breaking up s[0:i] optimally.

分析

  1. 首先要注意的是dictionary的职责是字典,每个字符串是可以重复利用的。

  2. 根据提示我们可以用动态规划,来计算,用dp[i]表示前i-1个字符剩余的最少额外字符。

  3. 输入:s = “leetscode”, dictionary = [“leet”,“code”,“leetcode”,“et”]

    那么我们观察dp[3]=3
    当i=4 时,对应字符leet,dp[4]=dp[3]+1=4
    et是可以匹配上的dp[4]可以所见到dp[2]
    leet是被匹配上的,所以dp[4]可以缩减到dp[0]
    

    当匹配到第i个字符时,我们需要从 i往前找到0位置(边界为j),找到可以发生状态转换的地方,并像给出的例子中一样找到这其中其中最小的dp[j]。
    dp[i] = min(dp[i],Set(dp[j]))

  4. 所以有:
    对于一般情况:dp[i] = dp[i-1]+1
    对于每个dp[i] 往前找: dp[i] = min(dp[i],Set(dp[j])),j∈[0,i-1]

编码

class Solution {public int minExtraChar(String s, String[] dictionary) {//dp其实也是一种记忆化搜索//关键在于找到子问题和状态跃迁方程//需要注意的是dictionary中的字符串可以被匹配多次int [] dp = new int[s.length()+1];dp[0] = 0;HashSet<String> dicSet = new HashSet<>();Collections.addAll(dicSet, dictionary);for (int i = 1; i <= s.length(); i++) {dp[i] = dp[i-1]+1;for (int j = i-1; j >= 0; j--) {//这是s全部的字串if(dicSet.contains(s.substring(j,i))){dp[i] = Math.min(dp[i],dp[j]);}}}return dp[dp.length-1];}
}

交流

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/616714.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tensorflow2.0笔记 - 修改形状和维度

本次笔记主要使用reshape&#xff0c;transpose&#xff0c;expand_dim&#xff0c;和squeeze对tensor的形状和维度进行操作。 import tensorflow as tf import numpy as nptf.__version__#tensor的shape和维数获取 #假设下面这个tensor表示4张28*28*3的图片 tensor tf.rando…

【我的RUST库】get_local_info 0.2.1发布

get_local_info是一个获取linux本地信息的Rust三方库&#xff0c;其目标是降低获取本地linux系统信息的难度。支持银河麒麟10、UOS、鸿蒙等国产系统。 项目维护&#xff1a;长期 当前功能&#xff1a; 1.网络功能 1.1.获取网络接口信息 1.2 获取活动网卡信息&#xff1a;网…

延时任务的解决方案

延时任务的解决方案 1.数据库轮询2. JDK的延迟队列3.netty时间轮算法4.使用消息队列 1.数据库轮询 该方案通常是在小型项目中使用&#xff0c;即通过一个线程定时的去扫描数据库&#xff0c;通过订单时间来判断是否有超时的订单&#xff0c;然后进行update或delete等操作 代码示…

面试题-回溯算法解法模板

常见的回溯算法面试题 电话号码的字母组合 组合 全排列 组合总和 回溯算法解题模板 对于用回溯解决的题目&#xff0c;代码大部分可以用下面的模板来套&#xff1a; void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择&#xff1a;本层集合中元素&…

C++核心编程——类和对象(二)

本专栏记录C学习过程包括C基础以及数据结构和算法&#xff0c;其中第一部分计划时间一个月&#xff0c;主要跟着黑马视频教程&#xff0c;学习路线如下&#xff0c;不定时更新&#xff0c;欢迎关注。 当前章节处于&#xff1a; ---------第1阶段-C基础入门 ---------第2阶段实战…

[ctf.show 元旦水友赛 2024] crypto

感觉半个多月回家没有打开过电脑了。看到ctf.show上元旦的比赛&#xff0c;才想起似乎应该看看。 月月的爱情故事 上来这就是个小脑洞题&#xff0c;给了一大段文字和一个base64的串。并且提示&#xff1a;试试摩斯吧&#xff01; 从文字上看只有三种标点符号&#xff0c;显…

基于汽车胎压检测及温度预警

课题简介 汽车胎压监测系统可分为两种&#xff1a;一种是间接式胎压监测系统&#xff0c;是通过轮胎的转速差来判断轮胎是否异常&#xff1b;另一种是直接式胎压监测系统&#xff0c;通过在轮胎里面加装四个胎压监测传感器&#xff0c;在汽车静止或者行驶过程中对轮胎气压和温…

SwiftUI之深入解析布局协议

一、什么是布局协议&#xff1f; 采用布局协议类型的任务&#xff0c;是告诉 SwiftUI 如何放置一组视图&#xff0c;需要多少空间。这类型常常被作为视图容器&#xff0c;虽然布局协议是 2022 年新推出的&#xff08;至少公开来说&#xff09;&#xff0c;但是我们在第一天使用…

国内外十大语言模型横向对比测评(截至2023.12.8)

主要参考资料&#xff1a; B站Up主贯一智能科技《国内外十大语言模型之横向对比测评》 现在有非常多的开源测试数据集&#xff0c;比如MMLU、AGIEval、CEval 但是根据Up主描述比较费时成本高&#xff0c;其次这类标准化评测更多考察模型在各个学科和领域的综合表现&#xff0c;…

线性代数:由矩阵 AB=A 可以推出 B=E 吗?

其实&#xff0c;类似的问题在十几年前的各种提问中就出现了&#xff0c;而且&#xff0c;根据 A B A A BA ABA 推出 B E BE BE 有时候也相当 "符合直觉”&#xff0c;但如果追根问底&#xff0c;矩阵 B B B 到底应该是什么样子的&#xff0c;却很少有详细的解答。 …

QML使用QCustomPlot笔记

这里在QML中使用QCustomPlot是定义一个继承自QQuickPaintedItem的类&#xff0c;它包含一个QCustomPlot对象&#xff0c;在paint函数中将这个对象转化为pixmap绘制到布局中显示。 在QML中使用QT的Widget控件也可以借鉴这个思路实现 顺便记录一下QCustomPlot的简单设置与使用。…

Docker的介绍及安装基本操作命令

前言 Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。 容器是完全使用沙箱…

C中分支和循环语句相关练习题

目录 &#xff08;1&#xff09;编写程序数一下1-100的所有整数中出现多少个数字9 (2)计算1/1-1/21/3-1/4......1/99-1/100的值&#xff0c;打印结果 (3)求十个整数中的最大值 &#xff08;4&#xff09;在屏幕上输出九九乘法口诀表 &#xff08;5&#xff09;二分查找元素 …

超声波模块驱动代码(CS100A芯片)

CS100A.c #include "CS100A.h"TIM_HandleTypeDef TimHandle;uint16_t CS100A_count0; //定时器中断中累加计数 float CS100A_distance0; //计算超声波测得的距离,单位为cm float err15/15.98; //调整误差系数&#xff0c;由于各种原因会出…

Hive 数据同步

一、需求 同步集团的数据到断直连环境。 二、思路 三、同步数据&#xff08;方案&#xff09; 1、环境&#xff1a;断直连模拟环境 2、操作机器&#xff1a;ETL 机器 XX.14.36.216 3、工作路径&#xff1a;cd /usr/local/fqlhadoop/hadoop/bin 4、执行命令&#xff1a; 命令…

H264码流进行RTP包封装

一.H264基本概念 H.264从框架结构上分为视频编码层&#xff08;VCL&#xff09;和网络抽象层&#xff08;NAL&#xff09;&#xff0c;VCL功能是进行视频编解码&#xff0c;包括运动补偿预测&#xff0c;变换编码和熵编码等功能&#xff1b;NAL用于采用适当的格式对VCL视频数据…

springboot实现文件上传与下载的通用思路模板流程

文件上传 需要将参数设置成为MultipartFile类型 或者我们可以使用spring提供的一个文件内置工具类 FileCopyUtils.copy(InputStream in…

线性方程组计算

一、题型 1&#xff09;给一个线性方程组&#xff0c;问&#xff1a;唯一解&#xff1f;无解&#xff1f;无穷多解&#xff1f; 2&#xff09;在上面的基础上&#xff0c;给一个未知数λ&#xff0c;问&#xff1a;当λ为几时&#xff0c;方程组唯一解&#xff1f;无解&#…

Git命令 本地-远程 简洁步骤

Git命令 本地-远程 简洁步骤 1、基本的操作 1.1、本地初始化、拉取和暂存 git init # 初始化仓库 git remote add origin SSH地址 # 建立远程连接 或者 git clone SSH地址 # 克隆远程仓库 git remote -v # 查看远程仓库地址 git status …

STM32F103RCT6开发板M3单片机教程07-TIMER1CH1输出 PWM做LED呼吸灯

概述 本教程使用是&#xff08;光明谷SUN_STM32mini开发板&#xff09; 免费开发板 在谷动谷力社区注册用户&#xff0c;打卡&#xff0c;发帖求助都可以获取积分&#xff0c;当然最主要是发原创应用文档奖励更多积分&#xff0e; (可用积分换取&#xff0c;真的不用钱&…