同步儲存一下。。。
這還叫中等難度???
再次照題解:
分類討論: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(lv2
) 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。測試的資料中,有...