LeetCode 题解工作台
子字符串匹配模式
给你一个字符串 s 和一个模式字符串 p ,其中 p 恰好 包含 一个 '*' 符号。 p 中的 '*' 符号可以被替换为零个或多个字符组成的任意字符序列。 如果 p 可以变成 s 的 子字符串 ,那么返回 true ,否则返回 false 。 示例 1: 输入: s = "leetcode", p…
2
题型
6
代码语言
3
相关题
当前训练重点
简单 · string·结合·string·matching
答案摘要
根据题目描述,`*` 可以被替换为零个或多个字符组成的任意字符序列,因此我们可以将模式字符串 按照 `*` 分割成若干个子串,如果这些子串依次出现在字符串 中且顺序不变,则说明 可以变成 的子字符串。 因此,我们首先初始化一个指针 指向字符串 的起始位置,然后遍历模式字符串 按照 `*` 分割得到的每个子串 ,在字符串 中从位置 开始查找子串 ,如果找到了,则将指针 移动到子串…
Interview AiBoxInterview AiBox 实时 AI 助手,陪你讲清 string·结合·string·matching 题型思路
题目描述
给你一个字符串 s 和一个模式字符串 p ,其中 p 恰好 包含 一个 '*' 符号。
p 中的 '*' 符号可以被替换为零个或多个字符组成的任意字符序列。
如果 p 可以变成 s 的 子字符串,那么返回 true ,否则返回 false 。
示例 1:
输入:s = "leetcode", p = "ee*e"
输出:true
解释:
将 '*' 替换为 "tcod" ,子字符串 "eetcode" 匹配模式串。
示例 2:
输入:s = "car", p = "c*v"
输出:false
解释:
不存在匹配模式串的子字符串。
示例 3:
输入:s = "luck", p = "u*"
输出:true
解释:
子字符串 "u" ,"uc" 和 "uck" 都匹配模式串。
提示:
1 <= s.length <= 501 <= p.length <= 50s只包含小写英文字母。p只包含小写英文字母和一个'*'符号。
解题思路
方法一:字符串匹配
根据题目描述,* 可以被替换为零个或多个字符组成的任意字符序列,因此我们可以将模式字符串 按照 * 分割成若干个子串,如果这些子串依次出现在字符串 中且顺序不变,则说明 可以变成 的子字符串。
因此,我们首先初始化一个指针 指向字符串 的起始位置,然后遍历模式字符串 按照 * 分割得到的每个子串 ,在字符串 中从位置 开始查找子串 ,如果找到了,则将指针 移动到子串 的末尾位置继续查找下一个子串;如果找不到,则说明模式字符串 不能变成字符串 的子字符串,返回 。如果所有子串都找到了,则返回 。
时间复杂度 ,空间复杂度 。其中 和 分别是字符串 和模式字符串 的长度。
class Solution:
def hasMatch(self, s: str, p: str) -> bool:
i = 0
for t in p.split("*"):
j = s.find(t, i)
if j == -1:
return False
i = j + len(t)
return True
复杂度分析
| 指标 | 值 |
|---|---|
| 时间 | complexity depends on scanning s and checking prefix and suffix matches, roughly O(n * m) where n = s.length and m = p.length. Space complexity is O(1) extra if no substring storage is needed. |
| 空间 | Depends on the final approach |
面试官常问的追问
外企场景- question_mark
Notice the pattern contains exactly one '*' indicating a split-match approach.
- question_mark
Ask about handling empty matches for the '*' character.
- question_mark
Check if your substring scanning handles all offsets efficiently.
常见陷阱
外企场景- error
Forgetting that '*' can match zero characters, leading to missed valid matches.
- error
Checking substrings shorter than prefix+suffix, which cannot match.
- error
Incorrectly matching prefix and suffix positions causing false negatives.
进阶变体
外企场景- arrow_right_alt
Patterns containing multiple '*' characters requiring backtracking or DP.
- arrow_right_alt
Case-insensitive matching or Unicode string support.
- arrow_right_alt
Finding all matching substrings instead of just returning true/false.