每日一題 模式匹配

2021-10-07 09:55:07 字數 2099 閱讀 7053

題目要求比較明確,重點在於只有a,b兩個情況,因此我們可以分別列舉就可以。每次確定a對應的字串的長度,列舉即可。

注意有乙個小的技巧在於,每次選擇a,b中比較大的那個為a,同時記著修改pattern串,這樣的好處是避免a=0帶來麻煩。

在第一次進行賦值時候,我們首先把空串設定為了none,這樣可以用乙個判斷很好的判斷是進行賦值還是比較。

class

solution

:def

patternmatching

(self, pattern:

str, value:

str)

->

bool:if

not pattern:

ifnot value:

return

true

else

:return

false

num_a =

0 num_b =

0for i in pattern:

if i ==

'a':

num_a +=

1else

: num_b +=1if

not value:

if num_b&num_a ==0:

return

true

else

:return

false

# 為了方便分析,我們設定個數較大的那個是aa

if num_a<=num_b:

num_a, num_b = num_b, num_a

s =''for i in pattern:

if i ==

'a':

s +=

'b'else

: s +=

'a'

pattern = s

n =len(value)

## 依次列舉a 對應的單詞的個數

for len_a in

range

((n//num_a)+1

):if num_b:

len_b =

(n-num_a*len_a)

//num_b

else

: len_b =

0if len_a*num_a+len_b*num_b != n:

continue

pos =

0 v_a, v_b =

none

,none

flag =

0for i in pattern:

if i ==

'a':

ifnot v_a:

v_a = value[pos:pos+len_a]

else

:if v_a != value[pos:pos+len_a]

:print(1

, len_a, v_a, value[pos:pos+len_a]

) flag =

1break

pos += len_a

else:if

not v_b:

v_b = value[pos:pos+len_b]

else

:if v_b != value[pos:pos+len_b]

:print(2

,len_b, v_b, value[pos:pos+len_b]

) flag =

1break

pos += len_b

if flag ==

0and v_a != v_b:

return

true

return

false

(力扣每日一題) 萬用字元匹配

給定乙個字串 s 和乙個字元模式 實現乙個支援 和 的萬用字元匹配。可以匹配任何單個字元。可以匹配任意字串 包括空字串 兩個字串完全匹配才算匹配成功。說明 s 可能為空,且只包含從 a z 的小寫字母。p 可能為空,且只包含從 a z 的小寫字母,以及字元 和 示例 1 輸入 s aa p a 輸出...

每日一題(單例模式)

單例模式 singleton pattern 是一種常用的軟體設計模式,該模式的主要目的是確保某乙個類只有乙個例項存在。當你希望在整個系統中,某個類只能出現乙個例項時,單例物件就能派上用場。使用模組 python 的模組就是天然的單例模式,因為模組在第一次匯入時,會生成.pyc檔案,當第二次匯入時,...

每日一題 1

題目詳情 peter喜歡玩數字遊戲,但數獨這樣的遊戲對他來說太簡單了,於是他準備玩乙個難的遊戲。遊戲規則是在乙個n n的 裡填數,規則 對於每個輸入的n,從左上角開始,總是以對角線為起點,先橫著填,再豎著填。這裡給了一些樣例,請在樣例中找到規律並把這個n n的 列印出來吧。輸入描述 多組測試資料 資...