leetcode面试题 16.18. 模式匹配(Python3)

该博客讨论了LeetCode面试题中的模式匹配问题,涉及字符串操作和算法。通过枚举方法,解释了如何判断一个字符串是否匹配给定的模式。文章列举了多种特殊情况,并提供了Python3的代码实现。
摘要由CSDN通过智能技术生成

leetcode面试题 16.18. 模式匹配

你有两个字符串,即patternvaluepattern字符串由字母"a""b"组成,用于描述字符串中的模式。例如,字符串"catcatgocatgo"匹配模式"aabab"(其中"cat""a""go""b"),该字符串也匹配像"a""ab""b"这样的模式。但需注意"a""b"不能同时表示相同的字符串。编写一个方法判断value字符串是否匹配pattern字符串。

示例 1:

输入: pattern = "abba", value = "dogcatcatdog"
输出: true

示例 2:

输入: pattern = "abba", value = "dogcatcatfish"
输出: false

示例 3:

输入: pattern = "aaaa", value = "dogcatcatdog"
输出: false

示例 4:

输入: pattern = "abba", value = "dogdogdogdog"
输出: true
解释: "a"="dogdog",b="",反之也符合规则

提示:

  • 0 <= len(pattern) <= 1000
  • 0 <= len(value) <= 1000
  • 你可以假设pattern只包含字母"a"和"b",value仅包含小写字母。

方法:枚举

思路:

本题思路很简单,枚举所有可能的a代表单词的长度,根据value长度计算出对应的b长度,如果为整数,则开始匹配。可以使用两个集合分别表示a和b对应的子串。遍历value,按照pattern中的顺序和a,b的长度将子串分别加入两个集合,最后如果两个集合中都只有一个元素(即a和b对应位置的子串都相等),那么说明此时a和b对应的单词就是一个正确的答案,返回True;遍历左右a可能的长度,都没有答案,则返回False。

这道题比较繁琐的在于边界条件,也就是特殊情况太多,下面就列举出特殊情况。

  • 第一种是pattern和value都为空,那么返回True,如果pattern为空,value不为空,返回False。
  • 然后是value为空,此时如果pattern中只有一种,即len(set(pattern))=1,那么就让这个a/b代表空,返回True;否则返回False。
  • 下一种情况是value不为空,pattern中只有一种,即len(set(pattern))=1,此时计算这种情况下所有value能否分成len(pattern)个相同的子串,如果可以返回True,不可以返回False。
  • 接下来统计a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值