news 2026/5/1 6:22:57

力扣-判断子序列

作者头像

张小明

前端开发工程师

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/1 5:46:07

运行实时日志怎么查?tail -f命令监控HeyGem系统状态

运行实时日志怎么查&#xff1f;tail -f命令监控HeyGem系统状态 在数字人视频生成这类高并发、资源密集型的AI系统中&#xff0c;一次任务“卡住”可能意味着GPU内存溢出&#xff0c;一个模型加载失败背后或许是路径权限问题。而用户只看到界面停滞——真正的问题藏在后台服务的…

作者头像 李华
网站建设 2026/4/18 18:24:34

【.NET性能优化关键一步】:using别名+指针类型提升执行效率

第一章&#xff1a;.NET性能优化的关键路径在构建高性能的 .NET 应用程序时&#xff0c;识别并优化关键性能路径至关重要。合理的资源管理、高效的代码执行路径以及对运行时行为的深入理解&#xff0c;是实现卓越性能的核心要素。合理使用异步编程模型 异步操作能够显著提升应用…

作者头像 李华
网站建设 2026/4/21 1:49:54

从入门到精通:C# using别名联合指针类型编程全路径

第一章&#xff1a;C# using别名与指针类型概述在C#开发中&#xff0c;using指令和指针类型是两个看似独立却在特定场景下极为重要的语言特性。using不仅用于资源管理&#xff0c;还可通过别名机制简化复杂类型的引用&#xff1b;而指针类型则为需要高性能或与非托管代码交互的…

作者头像 李华
网站建设 2026/4/30 11:16:20

本地化部署保障隐私:HeyGem让你的数据不出内网

HeyGem&#xff1a;让AI数字人视频生成真正“数据不出内网” 在金融合规审计的会议室里&#xff0c;一位产品经理正犹豫是否要使用热门的云端数字人工具来制作培训视频——尽管操作便捷、效果逼真&#xff0c;但每一帧画面和语音都得上传到第三方服务器。他心里清楚&#xff1a…

作者头像 李华
网站建设 2026/5/1 6:14:30

HeyGem对GOP大小敏感吗?关键帧间隔设置建议

HeyGem对GOP大小敏感吗&#xff1f;关键帧间隔设置建议 在数字人视频生成系统逐渐成为内容生产标配的今天&#xff0c;一个看似不起眼的编码参数——GOP&#xff08;Group of Pictures&#xff09;大小&#xff0c;正悄然影响着AI模型输出的质量与稳定性。你有没有遇到过这样的…

作者头像 李华
网站建设 2026/5/1 6:01:19

为什么你的Lambda多参数写法拖慢了性能?2个优化策略立即见效

第一章&#xff1a;Lambda多参数性能问题的根源在现代函数式编程中&#xff0c;Lambda 表达式因其简洁性和表达力被广泛使用。然而&#xff0c;当 Lambda 涉及多个参数处理时&#xff0c;可能引发不可忽视的性能问题。这些问题通常并非源于语法本身&#xff0c;而是与底层实现机…

作者头像 李华