Q52 正規表示式匹配

2021-10-23 01:30:25 字數 2397 閱讀 5771

題目描述

請實現乙個函式用來匹配包括』.『和』『的正規表示式。模式中的字元』.『表示任意乙個字元,而』'表示它前面的字元可以出現任意次(包含0次)。 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串"aaa"與模式"a.a"和"abaca"匹配,但是與"aa.a"和"ab*a"均不匹配

動態規劃:

這道題邊界情況也有點多,首先判斷s和pattern的長度,分出了四種情況,其中

1.如果s與pattern都為空,則true;

2.如果s不為空,而pattern為空,則false;

3.如果s為空,而pattern不為空,判斷pattern是否是a…這種情況,可以代表0次,這樣一來可以將pattern往後移兩位再進行match遞迴;

4.如果s、pattern不為空,又可以分為兩種情況:

4.1.如果pattern的第二個字元不為時,如果s[0]與pattern[0]能匹配上就將s和pattern都往後移1位再進行match,否則不匹配為false;

4.2.如果pattern的第二個字元為時,如果s[0]與pattern[0]匹配不上,則將pattern後移2位再進行match;如果s[0]與pattern[0]能匹配上,會出現三種情況,分別是pattern[1] = ''的代表的三種情況0、1或多個,分別對應pattern後移2位s不變、pattern後移2位,s後移1位、pattern不變s後移1位,這三種情況都有可能出現所以用or或運算連線三種情況的遞迴。

# -*- coding:utf-8 -*-

class

solution

:# s, pattern都是字串

defmatch

(self, s, pattern)

:# write code here

ls =

len(s)

lp =

len(pattern)

if ls==

0and lp==0:

return

true

elif ls!=

0and lp==0:

return

false

elif ls==

0and lp!=0:

# pattern中的第二個字元為*,則pattern後移兩位繼續比較

if lp>

1and pattern[1]

=='*'

:return self.match(s,pattern[2:

])else

:return

false

# 如果s不為空,pattern也不為空,則需要判斷

else

:# pattern的第二個字元為*的情況

if lp >

1and pattern[1]

=='*'

:# s與pattern的第乙個元素不同,則s不變,pattern後移兩位,相當於pattern前兩位當成空

if s[0]

!= pattern[0]

and pattern[0]

!='.'

:return self.match(s, pattern[2:

])# 如果s[0]與pattern[0]相同,且pattern[1]為*

else

:# 會有三種情況

# pattern後移2個,s不變;相當於把pattern前兩位當成空,匹配後面的,把*當做0次

f1 = self.match(s, pattern[2:

])# pattern後移2個,s後移1個;相當於pattern前兩位與s[0]匹配,把*當做1次

f2 = self.match(s[1:

], pattern[2:

])# pattern不變,s後移1個;相當於pattern前兩位,與s中的多位進行匹配,把*當做多次

f3 = self.match(s[1:

], pattern)

# 有乙個為真就能返回真值

return f1 or f2 or f3

# pattern的第二個字元不為*的情況

else

:# s和pattern的第乙個字元匹配上了,都往後移1位

if s[0]

== pattern[0]

or pattern[0]

=='.'

:return self.match(s[1:

],pattern[1:

])else

:return

false

52 正規表示式匹配

題目 請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 思路 當模式中的第二...

( )52 正規表示式匹配

請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 leetcode對應題目 ...

52 正規表示式匹配

題目描述 請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 分析 現在只考慮...