leetcode-392. 判断子序列
https://leetcode-cn.com/problems/is-subsequence/
双指针法
<?php class Solution { /** * @param String $s * @param String $t * @return Boolean */ function isSubsequence($s, $t) { $tLen = strlen($t); $sLen = strlen($s); $sLoc = 0; for ($tLoc = 0; $tLoc < $tLen; $tLoc++) { if ($sLoc >= $sLen) { return true; } if ($t[$tLoc] == $s[$sLoc]) { $sLoc++; } } return $sLoc >= $sLen; } }
动态规划
/** * @param String $s * @param String $t * @return Boolean */ function isSubsequence2($s, $t) { // f[i][j] = f[i+1][j] i != j // f[i][j] = i; i=j // 动态规划,先计算出每一个字符后面最先出现另外一个字符 $dp = []; for ($i = 0; $i < 26; $i ++) { $dp[strlen($t)][$i] = strlen($t); } // 初始化一个二维数组,数组是 strlen($t) * 26 的二维数组 // 每一个元素的 $i 指 $t 字符串的第几个字符 // 每一元素的 $j 指从 $i 位置到 $j 位置 // 值为下一个 $j 位置的 index, 如果$i 位置就是 $j 那就是自己 for ($i = strlen($t) - 1; $i >= 0; $i--) { for ($j = 0; $j < 26; $j++) { if (ord($t[$i]) == $j) { $dp[$i][$j] = $i; } else { $dp[$i][$j] = $dp[$i+1][$j]; } } } $curIndex = 0; for ($i = 0; $i < strlen($s); $i++) { if ($dp[$curIndex][ord($s[$i])] == strlen($t)) { return false; } else { $curIndex = $dp[$curIndex][ord($s[$i])] + 1; } } return true; }
动态规划的转移方程建议看一下官方题解,说的比较清楚
// f[i][j] = f[i+1][j]; i != j // f[i][j] = i; i=j
本文来自博客园,作者:吴丹阳-V,转载请注明原文链接:https://www.cnblogs.com/wudanyang/p/14880245.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2020-06-13 超过经理收入的员工-leetcode