LeetCode 面試16 18 模式匹配

2021-10-09 08:08:00 字數 1502 閱讀 1283

你有兩個字串,即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 不能同時表示相同的字串。...