本文讲解力扣第44题“通配符匹配”,是一道典型的线性动态规划问题。给定字符串 `s` 和模式串 `p`,其中 `p` 包含普通字符、`?`(匹配任意单个字符)和 `*`(匹配任意字符串,包括空串),判断两者是否完全匹配。解法使用二维DP数组 `f[i][j]` 表示 `s` 的前 `i` 个字符与 `p` 的前 `j` 个字符是否匹配。初始化时考虑 `*` 可匹配空串,状态转移分三种情况:当 `p[j-1]` 为 `*` 时,可继承 `f[i][j-1]` 或 `f[i-1][j]`;否则若字符相等或为 `?`,则依赖 `f[i-1][j-1]`。最终结果为 `f[n][m]`。代码清晰地实现了该逻辑,时间复杂度为 O(nm)。
本文讲解LeetCode“字符串相乘”问题的解法。作者指出该题属于高精度乘法,不能直接转换为整型计算以避免溢出。解法模拟竖式乘法过程:用两个嵌套循环处理每一位的相乘,并将结果累加到对应位置。随后统一处理进位,最后将结果数组转为字符串并去除前导零。代码使用C++实现,通过倒序遍历原字符串完成逐位运算,最终返回正确结果。关键细节包括进位处理和前导零的删除,确保输出格式正确。题目虽思路直观,但边界处理需谨慎。
本文介绍力扣经典题目“接雨水”的解法。通过双指针技巧,从数组两端向中间遍历,维护左右两侧的最大高度(lmax 和 rmax)。每次移动较小一侧的指针,该位置能接的雨水量为当前侧最大值减去其高度,并累加结果。核心思想是:每个位置能接的雨水由左右两边最大高度中的较小者决定。算法时间复杂度为 O(n),空间复杂度为 O(1),高效且易于实现。
本文讨论力扣第32题“最长有效括号”,要求找出给定括号字符串中最长有效括号子串的长度。作者首先尝试使用动态规划(DP)方法,定义 `dp[i]` 表示以第 `i` 个字符结尾的最长有效括号长度。状态转移分两种情况:当 `s[i] == ')'` 时,若前一字符为 `'('`,则形成 `"()"` 结构;否则检查是否能与更左侧的 `'('` 匹配,并结合已有的有效长度进行更新。优化后的 DP 解法时间复杂度为 O(n),空间复杂度为 O(n)。此外,作者指出该题也可用栈来解决,遍历字符串时利用栈存储下标,通过匹配括号更新最大长度,同样可达到 O(n) 时间效率。整体核心在于合理设计状态转移或利用栈维护未匹配位置。
本文系统梳理了动态规划(DP)的几类经典问题。首先介绍线性DP,通过数塔问题和免费馅饼问题展示自底向上递推求最大路径值的思想;接着讲解最长有序子序列问题。随后进入背包DP:01背包通过二维数组实现物品选与不选的状态转移,完全背包在此基础上允许重复选择,并通过状态方程优化降低复杂度。最后介绍区间DP,以石子合并为例,说明如何通过枚举区间长度、分段合并求解最优值,体现分治思想。文章强调状态定义与转移方程的重要性,为后续学习状态压缩DP做铺垫。整体由浅入深,涵盖DP核心思维与典型应用场景。(198字)
本文介绍了作者从零开始搭建个人博客网站的过程。最初,作者尝试使用Spring Boot、MySQL、OSS等技术栈自行开发,但由于缺乏项目经验和对前端框架Vue3的不熟悉而放弃。最终选择使用Halo进行部署。作者使用了腾讯云的学生轻量云服务器(Ubuntu Server 22.04 LTS),并购买了域名。通过FinalShell工具连接服务器后,安装了1Panel运维管理面板,并在其中配置了OpenResty和MySQL。接着,在1Panel的应用商店中安装Halo,完成域名解析或直接通过IP访问Halo,设置网站名称及用户信息后,即可开始使用博客。整个过程强调了项目经验的重要性以及遇到的实际困难。