每日一练 · 驼峰式匹配

94 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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



四、总结:

image.png

掘友们,解题不易,留下个赞或评论再走吧!谢啦~ 💐

希望对你有帮助

期待下次再见~

🌇 点赞 👍 收藏 ⭐留言 📝 一键三连 ~关注从你我做