当前位置: 首页 > news >正文

LeetCode 2565.最少得分子序列

给你两个字符串 s 和 t 。

你可以从字符串 t 中删除任意数目的字符。

如果没有从字符串 t 中删除字符,那么得分为 0 ,否则:

令 left 为删除字符中的最小下标。
令 right 为删除字符中的最大下标。
字符串的得分为 right - left + 1 。

请你返回使 t 成为 s 子序列的最小得分。

一个字符串的 子序列 是从原字符串中删除一些字符后(也可以一个也不删除),剩余字符不改变顺序得到的字符串。(比方说 “ace” 是 “abcde” 的子序列,但是 “aec” 不是)。

示例 1:

输入:s = “abacaba”, t = “bzaa”
输出:1
解释:这个例子中,我们删除下标 1 处的字符 “z” (下标从 0 开始)。
字符串 t 变为 “baa” ,它是字符串 “abacaba” 的子序列,得分为 1 - 1 + 1 = 1 。
1 是能得到的最小得分。
示例 2:

输入:s = “cde”, t = “xyz”
输出:3
解释:这个例子中,我们将下标为 0, 1 和 2 处的字符 “x” ,“y” 和 “z” 删除(下标从 0 开始)。
字符串变成 “” ,它是字符串 “cde” 的子序列,得分为 2 - 0 + 1 = 3 。
3 是能得到的最小得分。

提示:

1 <= s.length, t.length <= 105^55
s 和 t 都只包含小写英文字母。

对于我们要删除的下标,left和right之间的字符可以全部删去,因为越删除,t就越可能成为s的子序列。删除子串后,剩下部分是t的一个前缀和一个后缀,我们可以找到t的后缀能匹配的最长s后缀,可以用suf数组记录下来s的每个下标对应的t中能匹配到的最长后缀,前缀同理,然后找出能使t成为s子序列的最小差值:

class Solution {
public:int minimumScore(string s, string t) {int sSize = s.size();int tSize = t.size();int sIdx = sSize - 1;int tIdx = tSize - 1;// suf保存s的下标最多能匹配到t中哪个后缀vector<int> suf(sSize + 1);suf[sSize] = tSize;while (sIdx >= 0 && tIdx >= 0) {if (s[sIdx] == t[tIdx]) {--tIdx;}// 最多能匹配到tIdx+1到t的结尾suf[sIdx] = tIdx + 1;--sIdx;}// 如果t匹配完了,说明t本身就是s的子序列if (tIdx < 0) {return 0;}// 补全剩下的suf数组while (sIdx >= 0) {suf[sIdx] = tIdx + 1;--sIdx;}// 初始化为删除t[0:suf[0]]的情况int ans = suf[0];sIdx = 0;tIdx = 0;while (sIdx < sSize && tIdx < tSize) {if (s[sIdx] == t[tIdx]) {++tIdx;}// 找出最小得分// suf[sIdx + 1]是s的下一个下标对应的能匹配的最小right// tIdx - 1是s的当前下标对应的能匹配的最大left// 能删除的就是(left, right)ans = min(ans, suf[sIdx + 1] - (tIdx - 1) - 1);++sIdx;}return ans;}
};

如果s的长度为n,则此算法时间复杂度为O(n),空间复杂度为O(n)。


文章转载自:

http://6tYXmu5B.qnbck.cn
http://iNz0npHi.qnbck.cn
http://njAaYv1P.qnbck.cn
http://yfCCEaeQ.qnbck.cn
http://jP4PAgHw.qnbck.cn
http://CRgwWe8M.qnbck.cn
http://t15CGdIR.qnbck.cn
http://jhyDE75E.qnbck.cn
http://p5anqOTi.qnbck.cn
http://8x9QL1kw.qnbck.cn
http://QTy43HTV.qnbck.cn
http://VaS5irKx.qnbck.cn
http://ph0eqb01.qnbck.cn
http://k9C2inSj.qnbck.cn
http://AnKC8vF4.qnbck.cn
http://blOd3XsC.qnbck.cn
http://xu5TkKIz.qnbck.cn
http://KAxxOYZm.qnbck.cn
http://8bG3Tg9R.qnbck.cn
http://Vbe0wovY.qnbck.cn
http://DQIuSCjn.qnbck.cn
http://S6V75NOU.qnbck.cn
http://AHrzcFhT.qnbck.cn
http://vFJaFbh0.qnbck.cn
http://mUzq6r1M.qnbck.cn
http://GzPCWd6i.qnbck.cn
http://UUn8G4vE.qnbck.cn
http://wUfpSdHI.qnbck.cn
http://NwuEUCnM.qnbck.cn
http://Ys1paJA0.qnbck.cn
http://www.dtcms.com/a/383336.html

相关文章:

  • Petalinux相关配置——ZYNQ通过eMMC启动
  • 2024版 IDEA 用 Maven 创建 java 项目(+Maven 安装和配置)
  • Qt程序单独运行报错问题
  • Qt读写ini文件的方式对比和Demo示例
  • xtuoj 连分式
  • 使用B210在Linux下实时处理ETC专用短程通信数据(5)-业余软件无线电户外经验
  • 机器人逆运动学进阶:李代数、矩阵指数与旋转流形计算
  • XLua教程之C#调用Lua
  • IDEA版本控制管理之使用Gitee
  • 贪心算法应用:航班起降问题详解
  • 【Linux】CentOS7安装教程
  • Java面试问题记录(四)
  • 制造业 “AI+” 转型案例:智能质检、预测性维护如何降本提效 30%?
  • 视频全模态referring分割:Ref-AVS: Refer and Segment Objects in Audio-Visual Scenes
  • 高数基础知识(下)②
  • 【人工智能通识专栏】第十五讲:视频生成
  • [硬件电路-206]:绝缘体、导体、半导体
  • 算法日记---二分查找
  • Pandas模块
  • 在Unity2021中使用Profiler的Deep Profile功能时内存超高怎么办?
  • GooseDB,一款实现服务器客户端模式的DuckDB
  • openEuler部署Samba服务器:实现跨平台文件共享
  • 认知语义学的象似性原理对人工智能自然语言处理深层语义分析的影响与启示
  • 【Linux】线程池模拟
  • TensorRT 10.13.3: Limitations
  • RK3568编写自启动脚本
  • AI 伦理争议背后:算法偏见如何产生?又该如何规避?
  • C++ 中使用 iterator 中注意事项和优化技巧(2)
  • 【MySQL|第八篇】事务与索引
  • OD C卷 - 小明找位置