KMP 算法
题目描述给定一个文本串 s 和一个模式串 p,在 s 中查找 p 第一次出现的位置。如果不存在则返回 -1。暴力匹配的时间复杂度为 O(m × n),而 KMP 算法通过预处理模式串的"前后缀信息",将匹配过程优化到 O(m + n),核心思想是匹配失败时利用已知信息跳过不必要的比较。解题方法:KMP(Knuth-Morris-Pratt)KMP 算法的关键在于 next 数组(也称前缀函数)。它
题目描述给定一个文本串 s 和一个模式串 p,在 s 中查找 p 第一次出现的位置。如果不存在则返回 -1。暴力匹配的时间复杂度为 O(m × n),而 KMP 算法通过预处理模式串的"前后缀信息",将匹配过程优化到 O(m + n),核心思想是匹配失败时利用已知信息跳过不必要的比较。解题方法:KMP(Knuth-Morris-Pratt)KMP 算法的关键在于 next 数组(也称前缀函数)。它
题目描述给定一个字符串数组 recipes(食谱)、一个二维字符串数组 ingredients(每个食谱所需的食材列表)以及一个字符串数组 supplies(当前拥有的所有食材)。每道菜做好后也可以作为其他菜的食材。返回所有可以做出的食谱列表。解题方法思路分析本题的核心在于处理食谱与食材之间的依赖关系。一道菜依赖若干种食材,而做好的菜又可以作为其他菜的食材,这种"前置条件满足后才能解锁"的特性决定
题目描述现在你总共有 numCourses 门课需要选,记为 0 到 numCourses - 1。给你一个数组 prerequisites,其中 prerequisites[i] = [ai, bi],表示在选修课程 ai 前必须先选修 bi。请你返回一个可以修完所有课程的学习顺序。如果不可能完成所有课程(即存在环),返回一个空数组。解题方法:拓扑排序(Kahn 算法)本题是经典的拓扑排序问题。
解题思路本题要求判断能否从网格左上角 (0, 0) 走到右下角 (m-1, n-1),其中每个格子代表一种街道类型(1~6),每种街道只允许特定方向通行。核心思想是使用 BFS(广度优先搜索) 遍历所有可达位置,并在移动时验证 双向连通性:即当前格子允许通往下一格,且下一格也允许从当前格进入。代码解析class Solution: def hasValidPath(self, grid: