你有两个字符串,即pattern和value。 pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式。例如,字符串"catcatgocatgo"匹配模式"aabab"(其中"cat"是"a","go"是"b"),该字符串也匹配像"a"、"ab"和"b"这样的模式。但需注意"a"和"b"不能同时表示相同的字符串。编写一个方法判断value字符串是否匹配pattern字符串。
本题采用枚举的方法,枚举“a”对应的子串长度,找到a和b对应的子串,判断能否匹配。
class Solution:
def patternMatching(self, pattern: str, value: str) -> bool:
count_a = sum(1 for ch in pattern if ch == 'a')
count_b = len(pattern) - count_a
if count_a < count_b:
count_a, count_b = count_b, count_a
pattern = ''.join('a' if ch == 'b' else 'b' for ch in pattern)
if not value:
return count_b == 0
if not pattern:
return False
for len_a in range(len(value) // count_a + 1):
rest = len(value) - count_a * len_a
if (count_b == 0 and rest == 0) or (count_b != 0 and rest % count_b == 0):
len_b = 0 if count_b == 0 else rest // count_b
pos, correct = 0, True
value_a, value_b = None, None # 当前长度情况下a和b对应的字符串的值,之后截取的子串会和该串进行比较。
for ch in pattern:
if ch == 'a':
sub = value[pos:pos + len_a]
if not value_a:
value_a = sub
elif value_a != sub:
correct = False
break
pos += len_a
else:
sub = value[pos:pos + len_b]
if not value_b:
value_b = sub
elif value_b != sub:
correct = False
break
pos += len_b
if correct and value_a != value_b:
return True
return False