题目简介:
你有两个字符串,即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) <= 1000
0 <= 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 { |