你有兩個字串,即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
LeetCode面試題 16 18 模式匹配
同步儲存一下。這還叫中等難度?再次照題解 分類討論 1.pattern為空,則只有value為空時為true,否則false 2.當value為空時,如果pattern中既有a也有b則為false,否則為true 3.當二者都不為空,如果pattern只有a或者只有b,如果value能整除patte...
Leetcode 面試題 16 18 模式匹配
你有兩個字串,即pattern和value。pattern字串由字母 a 和 b 組成,用於描述字串中的模式。例如,字串 catcatgocatgo 匹配模式 aabab 其中 cat 是 a go 是 b 該字串也匹配像 a ab 和 b 這樣的模式。但需注意 a 和 b 不能同時表示相同的字串。...
LeetCode面試題 16 18 模式匹配
你有兩個字串,即pattern和value。pattern字串由字母 a 和 b 組成,用於描述字串中的模式。例如,字串 catcatgocatgo 匹配模式 aabab 其中 cat 是 a go 是 b 該字串也匹配像 a ab 和 b 這樣的模式。但需注意 a 和 b 不能同時表示相同的字串。...