LeetCode面試題 16 18 模式匹配

2021-10-07 09:57:11 字數 2205 閱讀 1414

同步儲存一下。。。

這還叫中等難度???

再次照題解:

分類討論:1.pattern為空,則只有value為空時為true,否則false;

2.當value為空時,如果pattern中既有a也有b則為false,否則為true;

3.當二者都不為空,如果pattern只有a或者只有b,如果value能整除pattern的個數,並且每個子串都一樣則為true,否則為false;

4.當二者都不為空,且pattern中既有a也有b,則統計ab個數,如果其中乙個個數為1,則可以把其當做value,另乙個為『』,返回true;

5.二者都不為空,且pattern中a和b的個數都大於1,這就最最麻煩了,遍歷所有a可能的字串長度,確定對應的b字串長度,按照pattern走一遍,用set分別統計ab對應的子串,如果最後兩個set都只有乙個元素且value剛好遍歷完,則返回true,如果a對應的所有長度都找不到對應匹配,則最後返回false。

時間o (l

v2

)o(^2)

o(lv​2

) a的每個長度都遍歷一遍,每次遍歷都要遍歷value

空間o (l

v)

o(l_v)

o(lv​)

需要儲存a和b的子串,長度之和不超過value長度

class

solution

:def

patternmatching

(self, pattern:

str, value:

str)

->

bool

:if pattern=='':

return value==

''elif value=='':

if'a'

in pattern and

'b'in pattern:

return

false

else

:return

true

elif

len(

set(pattern))==

1:iflen

(value)

%len

(pattern)!=0

:return

false

else

: l=

len(value)

//len

(pattern)

sub=value[

0:l]

for i in

range(1

,len

(pattern)):

if value[l*i:l*

(i+1)]

!=sub:

return

false

return

true

else

: ca=pattern.count(

'a')

cb=pattern.count(

'b')

if ca==

1or cb==1:

return

true

for i in

range

(len

(value)

//ca)

: b_s=

len(value)

-i*ca

j=b_s//cb

set_a=

set(

) set_b=

set(

) p=

0for c in pattern:

if c==

'a':

set_a.add(value[p:p+i]

) p+=i

else

: set_b.add(value[p:p+j]

) p+=j

iflen(set_a)==1

andlen

(set_b)==1

and p==

len(value)

:return

true

return

false

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 不能同時表示相同的字串。...

leetcode 面試題 16 18 模式匹配

把pattern中的a和b看成兩個不同的字串。字串value看成x個a和y個b按照pattern的模式組合起來的字串。把所有的這些可能算出來看能不能湊成value。先計算滿足a x b y c的所有 x,y 對vp。c表示value的大小。然後對vp進行遍歷,看能不能湊成value。測試的資料中,有...