2 1 劍指offer 正規表示式匹配

2021-09-10 12:08:43 字數 1945 閱讀 6436

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

首先,考慮特殊情況:

1> 兩個字串都為空,返回true

2> 當第乙個字串不空,而第二個字串空了,返回false(無法匹配成功)

3> 如果第乙個字串空了,第二個字串非空,還是可能匹配成功的(比如第二個字串是「aaaa」,由於『*』之前的元素可以出現0次,所以有可能匹配成功)

之後就開始匹配第乙個字元,這裡有兩種可能:匹配成功或匹配失敗。但考慮到pattern下乙個字元可能是『*』, 這裡我們分兩種情況討論:pattern下乙個字元為『*』或不為『*』:

1> pattern下乙個字元不為『*』:這種情況比較簡單,直接匹配當前字元。如果匹配成功,繼續匹配下乙個;如果匹配失敗,直接返回false。注意這裡的「匹配成功」,除了兩個字元相同的情況外,還有一種情況,就是pattern的當前字元為『.』,同時str的當前字元不為『\0』。

2> pattern下乙個字元為『*』時,稍微複雜一些,因為『*』可以代表0個或多個。

這裡把這些情況都考慮到:

a> 當『*』匹配0個字元時,str當前字元不變,pattern當前字元後移兩位,跳過這個『*』符號;

b> 當『*』匹配1個或多個時,str當前字元移向下乙個,pattern當前字元不變。(這裡匹配1個或多個可以看成一種情況,因為:當匹配乙個時,由於str移到了下乙個字元,而pattern字元不變,就回到了上邊的情況a;當匹配多於乙個字元時,相當於從str的下乙個字元繼續開始匹配)

下一步可能有多個走法時,適合用遞迴(呼叫自身),把多個結果用or連線起來。

def

match

(s, pattern):if

len(s)==0

andlen

(pattern)==0

:return

true

iflen

(s)!=

0and

len(pattern)==0

:return

false

iflen

(s)==

0and

len(pattern)!=0

:iflen(pattern)

>

1and pattern[1]

=='*'

:return match(s, pattern[2:

])else

:return

false

i =0if

len(pattern)

>

1and pattern[i+1]

=='*'

:if pattern[i]

== s[i]

or(pattern[i]

=='.'

and i <

len(s)):

# 匹配1個字元;匹配多個字元(pattern不變);匹配0個字元

return match(s[1:

], pattern[2:

])or match(s[1:

], pattern)

or match(s, pattern[2:

])else

:return match(s, pattern[2:

])if pattern[i]

== s[i]

or(pattern[i]

=='.'

and i <

len(s)):

return match(s[1:

], pattern[1:

])return

false

# 都不匹配則返回false

劍指offer 正規表示式匹配

請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 abaca 匹配,但是與 aa.a 和 aba 均不匹配 由於只涉及兩種正規表示式的匹配,...

劍指Offer 正規表示式匹配

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

劍指offer 正規表示式匹配

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