題目要求比較明確,重點在於只有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的 列印出來吧。輸入描述 多組測試資料 資...