news 2026/5/23 1:11:59

力扣-判断子序列

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
力扣-判断子序列

双指针

思路分析

  • 使用双指针 sIndex 和 tIndex 分别指向字符串 s 和 t。
  • 遍历 t,如果 s 当前字符和 t 当前字符相同,sIndex 右移,tIndex 始终右移。
  • 最后判断 sIndex 是否等于 s 的长度,如果是则 s 是 t 的子序列。

代码实现

publicbooleanisSubsequence(Strings,Stringt){// 1. 定义指针i,j分别指向s,t的第一个元素inti=0;intj=0;// 2. 遍历字符串t,校验字符串s的每个字符是否都在t中while(i<s.length()&&j<t.length()){if(s.charAt(i)==t.charAt(j)){i++;}j++;}// 3. 如果i指针遍历完了s字符串,说明s是t的子序列returni==s.length();}

复杂度分析

  • 时间复杂度为 O(n),这里 n 是字符串 t 的长度。
  • 空间复杂度为O(1)

动态规划

思路分析

  • 定义一个二维数组 dp[i][j],其中 i 表示字符串 s 的前 i 个字符,j 表示字符串 t 的前 j 个字符。dp[i][j] 的值为 true 表示 s 的前 i 个字符是 t 的前 j 个字符的子序列,否则为 false。
  • 初始化 dp[0][j] 为 true,因为空字符串是任何字符串的子序列。
  • 状态转移方程为:
    • 如果 s[i - 1] == t[j - 1],那么 dp[i][j] = dp[i - 1][j - 1],表示如果当前字符相等,s 的前 i 个字符是 t 的前 j 个字符的子序列当且仅当 s 的前 i - 1 个字符是 t 的前 j - 1 个字符的子序列。
    • 如果 s[i - 1] != t[j - 1],那么 dp[i][j] = dp[i][j - 1],表示如果当前字符不相等,s 的前 i 个字符是 t 的前 j 个字符的子序列当且仅当 s 的前 i 个字符是 t 的前 j - 1 个字符的子序列。
  • 最终 dp[s.length()][t.length()] 的值即为所求。

代码实现

publicbooleanisSubsequence2(Strings,Stringt){intm=s.length();intn=t.length();boolean[][]dp=newboolean[m+1][n+1];for(intj=0;j<=n;j++){dp[0][j]=true;}for(inti=1;i<=m;i++){for(intj=1;j<=n;j++){if(s.charAt(i-1)==t.charAt(j-1)){dp[i][j]=dp[i-1][j-1];}else{dp[i][j]=dp[i][j-1];}}}returndp[m][n];}

复杂度分析

  • 时间复杂度为O(m∗n),其中 m 是字符串 s 的长度,n 是字符串 t 的长度,因为需要填充一个 m * n 的二维数组。
  • 空间复杂度为 O(m∗n),即二维数组的大小。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/21 11:59:17

HoRain云--OpenCV图像阈值处理全解析

&#x1f3ac; HoRain 云小助手&#xff1a;个人主页 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站&#xff0c;性价比超高&#xff0c;大内存超划算&#xff01;忍不住分享一下给大家。点击跳转到网站。 目录 ⛳️ 推荐 …

作者头像 李华
网站建设 2026/5/20 9:04:42

C语言逻辑操作符详解:从入门到精通,避坑指南与实战应用

在编程世界中&#xff0c;逻辑操作符如同决策的大脑&#xff0c;让程序能够智能地判断和选择。 一、逻辑操作符是什么&#xff1f; 在C语言中&#xff0c;逻辑操作符是用于连接多个条件表达式&#xff0c;形成复杂逻辑判断的重要工具。它们返回一个布尔值&#xff08;真或假&a…

作者头像 李华
网站建设 2026/5/19 18:58:45

WebSocket通信机制存在?推测HeyGem前后端异步传输数据

WebSocket通信机制存在&#xff1f;推测HeyGem前后端异步传输数据 在如今的AI应用开发中&#xff0c;一个看似简单却至关重要的问题浮出水面&#xff1a;当用户点击“开始生成”后&#xff0c;页面是如何实时更新进度条、显示当前处理的视频名称&#xff0c;而无需刷新或等待超…

作者头像 李华
网站建设 2026/5/20 23:49:47

【技术教程】开源实时新闻聚合器NewsNow

NewsNow 开源项目详解 NewsNow 是一个由开发者 ourongxing 创建的开源实时新闻聚合器&#xff0c;旨在将分散在各个平台的热点信息统一到一个简洁优雅的界面中&#xff0c;帮助用户高效获取有价值的信息&#xff0c;摆脱传统资讯平台的算法绑架和信息茧房。 ⚠️ 重要区分&am…

作者头像 李华
网站建设 2026/5/20 9:05:22

[特殊字符]一键打包下载:HeyGem为用户提供便捷的结果导出方案

一键打包下载&#xff1a;HeyGem 如何让批量视频导出更高效 在数字人内容生产逐渐走向工业化的今天&#xff0c;AI 视频生成系统早已不再只是“能跑通流程”的工具&#xff0c;而是需要真正贴近用户工作流、解决实际交付痛点的产品。HeyGem 正是这样一个将用户体验贯穿始终的系…

作者头像 李华
网站建设 2026/5/22 16:59:57

【稀缺资料】C# 12拦截器性能调优的7个隐藏技巧(微软内部文档泄露)

第一章&#xff1a;C# 12拦截器性能调优概述 C# 12 引入的拦截器&#xff08;Interceptors&#xff09;为开发人员提供了在编译时替换方法调用的能力&#xff0c;尤其适用于提升运行时性能、减少反射开销以及实现轻量级AOP模式。这一特性允许开发者将特定方法调用静态绑定到替代…

作者头像 李华