劍指offer刷題 正規表示式匹配

2021-10-07 02:42:30 字數 1546 閱讀 4110

題目描述

請實現乙個函式用來匹配包括』.『和』『的正規表示式。模式中的字元』.『表示任意乙個字元,而』'表示它前面的字元可以出現任意次(包含0次)。

在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串"aaa"與模式"a.a"和"abaca"匹配,但是與"aa.a"和"ab*a"均不匹配

思路:

縷清思路是多麼重要!!!!

首先,考慮特殊情況:

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

2>當第乙個字串不空,而第二個字串空了,返回false(因為這樣,就無法匹配成功了,而如果第乙個字串空了,第二個字串非空,還是可能匹配成功的,比如第二個字串是「aaaa」,由於『*』之前的元素可以出現0次,所以有可能匹配成功)

之後就開始匹配第乙個字元,這裡有兩種可能:匹配成功或匹配失敗。但考慮到pattern 下乙個字元可能是『 * 』, 這裡我們分兩種情況討論:attern下乙個字元為 『 * 』或不為『 * 』: 1>pattern的下乙個字元不為『 * 』:這種情況比較簡單,直接匹配當前字元。如果匹配成功,繼續匹配下乙個;如果匹配失敗,直接返回false。注意這裡的「匹配成功」,有兩種可能,一是兩個字元相同;二是pattern的當前字元為『 . 』,同時str的當前字元不為『\0』。

如果字串第乙個字元跟模式第乙個字元不匹配,則模式後移2個字元,繼續匹配。如果字串第乙個字元跟模式第乙個字元匹配,可以有3種匹配方式:

a、模式後移2字元,相當於x*被忽略;

b、字串後移1字元,模式後移2字元;

c、字串後移1字元,模式不變,即繼續匹配字元下一位,因為』 * '可以匹配多位;

public

class

solution

public

boolean

matchcore

(char

str,

int strindex,

char

pattern,

int patternindex)

//pattern先到尾,匹配失敗

if(strindex != str.length && patternindex == pattern.length)

//模式第2個是*,且字串第1個跟模式第1個匹配,分3種匹配模式;如不匹配,模式後移2位

if(patternindex +

1< pattern.length && pattern[patternindex +1]

=='*'

)else

}//模式第2個不是*,且字串第1個跟模式第1個匹配,則都後移1位,否則直接返回falseif(

(strindex != str.length && pattern[patternindex]

== str[strindex])||

(pattern[patternindex]

=='.'

&& strindex != str.length)

)return

false;}

}

出鞘之劍指offer 第19題 正規表示式匹配

實現乙個函式用來匹配 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示他前面的字元可以出現任意次 含0次 在本題中,匹配是指字串的所有字元匹配整個模式。用遞迴來做。如果掃瞄到 就有三種情況。掃瞄到 就有一種情況。package offer.xzs.nineteenth public cla...

劍指offer 正規表示式匹配

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

劍指Offer 正規表示式匹配

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