题目简介:
你有两个字符串,即pattern和value。 pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式。例如,字符串"catcatgocatgo"匹配模式"aabab"(其中"cat"是"a","go"是"b"),该字符串也匹配像"a"、"ab"和"b"这样的模式。但需注意"a"和"b"不能同时表示相同的字符串。编写一个方法判断value字符串是否匹配pattern字符串。
示例 1:
1 | 输入: pattern = "abba", value = "dogcatcatdog" |
示例 2:
1 | 输入: pattern = "abba", value = "dogcatcatfish" |
示例 3:
1 | 输入: pattern = "aaaa", value = "dogcatcatdog" |
示例 4:
1 | 输入: pattern = "abba", value = "dogdogdogdog" |
提示:
0 <= len(pattern) <= 10000 <= len(value) <= 1000- 你可以假设
pattern只包含字母"a"和"b",value仅包含小写字母。
思路:
我们可以分为以下几种情况进行讨论:
pattern为空:此时的结果取决于value是否为空value为空:此时若pattern由一个字符构成,则符合匹配,否则不符合pattern, value均不为空,统计字符a和字符b的数量:- 若
a和b其中有一个数量为0,假设a的数量为0,则能计算出每个单词的长度为value.size() / count_b,然后遍历value,用substr()进行单词分割,若每个单词相同则匹配成功,否则失败。 - 两者数量均不为空,则开始枚举单词的长度,首先
wordA_len * count_a + wordB_len * count_b = value.size()是固定的,所以我们枚举wordA_len,从0枚举到value.size(),其中边界值均能取到,因为存在a或b代表空字符串的情况。然后就根据pattern中出现的字符来分割单词,并判断相同字符所代表的单词是否相同,从而判断是否能匹配成功。
- 若
tip:
- 注意单词长度枚举时的边界值,
0和value.size()均可以取到。 - 擅长使用
substr()函数。 - 注意
check()函数的具体实现代码。
代码如下:
1 | class Solution { |