持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天,点击查看活动详情
一、题目描述:
如果我们可以将小写字母插入模式串 pattern 得到待查询项 query,那么待查询项与给定模式串匹配。(我们可以在任何位置插入每个字符,也可以插入 0 个字符。)
给定待查询列表 queries,和模式串 pattern,返回由布尔值组成的答案列表 answer。只有在待查项 queries[i] 与模式串 pattern 匹配时, answer[i] 才为 true,否则为 false。
示例 1:
输入:queries = ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"], pattern = "FB" 输出:[true,false,true,true,false] 示例: "FooBar" 可以这样生成:"F" + "oo" + "B" + "ar"。 "FootBall" 可以这样生成:"F" + "oot" + "B" + "all". "FrameBuffer" 可以这样生成:"F" + "rame" + "B" + "uffer". 示例 2:
输入:queries = ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"], pattern = "FoBa" 输出:[true,false,true,false,false] 解释: "FooBar" 可以这样生成:"Fo" + "o" + "Ba" + "r". "FootBall" 可以这样生成:"Fo" + "ot" + "Ba" + "ll". 示例 3:
输出:queries = ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"], pattern = "FoBaT" 输入:[false,true,false,false,false] 解释: "FooBarTest" 可以这样生成:"Fo" + "o" + "Ba" + "r" + "T" + "est".
提示:
1 <= queries.length <= 100 1 <= queries[i].length <= 100 1 <= pattern.length <= 100 所有字符串都仅由大写和小写英文字母组成。
二、思路分析:
题目的意思很直接,需要进行字符串匹配,并且所有的大写字母都需要匹配到。所以大概可以分出如下几种情况。
- patten没匹配完,query也没匹配完,继续执行
- patten匹配完了,但是query没匹配完,这时候需要继续执行,因为query之后仍然可能存在大写字母
- patten没匹配完,但是query匹配完了,这说明匹配失败
- patten匹配完了,query也空了,这种情况下算作匹配成功。
将str与pattern逐个字符进行比较。 当字符相等时,跳到下一个字符; 当字符不相等时,若str当前字符是大写字母,匹配结果为false 当pattern字符比较结束时,若str中还剩余字符,判断str中是否有大写字母,有的话结果为false,否则为true。
三、AC 代码:
class Solution:
def camelMatch(self, queries: List[str], pattern: str) -> List[bool]:
m = len(pattern)
ans = []
for query in queries:
j, n = 0, len(query)
for i in range(m):
while j < n and pattern[i] != query[j] and query[j].islower():
j += 1
if j == n or pattern[i] != query[j]:
ans.append(False)
break
i += 1
j += 1
else:
while j < n and query[j].islower(): # 遍历query剩下的字符,如果还有大写字母,返回False
j += 1
if j == n:
ans.append(True)
else:
ans.append(False)
return ans
四、总结:
掘友们,解题不易,留下个赞或评论再走吧!谢啦~ 💐
希望对你有帮助
期待下次再见~
🌇 点赞 👍 收藏 ⭐留言 📝 一键三连 ~关注从你我做