正規表示式匹配

2021-09-01 23:55:35 字數 2326 閱讀 9490

給定乙個字串 (s) 和乙個字元模式 §。實現支援 『.』 和 『*』 的正規表示式匹配。

『.』 匹配任意單個字元。

『*』 匹配零個或多個前面的元素。

匹配應該覆蓋整個字串 (s) ,而不是部分字串。

說明:

示例 1:

輸入:s = 「aa」

p = 「a」

輸出: false

解釋: 「a」 無法匹配 「aa」 整個字串。

示例 2:

輸入:s = 「aa」

p = 「a*」

輸出: true

解釋: 『*』 代表可匹配零個或多個前面的元素, 即可以匹配 『a』 。因此, 重複 『a』 一次, 字串可變為 「aa」。

示例 3:

輸入:s = 「ab」

p = "."

輸出: true

解釋: 「.*」 表示可匹配零個或多個(』』)任意字元(』.』)。

示例 4:

輸入:s = 「aab」

p = 「c*a*b」

輸出: true

解釋: 『c』 可以不被重複, 『a』 可以被重複一次。因此可以匹配字串 「aab」。

示例 5:

輸入:s = 「mississippi」

p = 「mis*is*p*.」

輸出: false

思想

首先可以分為兩種情況

**
class

solution

int i =0;

int j =0;

while

(i != s.

length()

&& j != p.

length()

)else

else

if(p.

charat

(j)==

'*'&&j>0)

}else

}else

if(j<

(p.length()

-1)&&p.

charat

(j+1)==

'*')

else}}

if(j<

(p.length()

)&&p.

charat

(j)==s.

charat

(i-1))

if(ilength()

||jlength()

)return

true;}

}

問題

大部分的字串都可以匹配,但是例如s=「aaa」,p="a*a"就不可以,因為j無法向後移動,如果s=「aaaaaa」,p=「a*aaa」,也無法得出正確的結論,因為無法判斷

*應該匹配幾個a。

官方給出的第乙個解法,類似於我自己的答案,也可以說是暴力法

思想

設定乙個變數用於匹配第乙個字元,若匹配成功則置true,若不成功則置false

如果p的length>=2以及p的下乙個字元為"*",若上面的變數為false擷取p從兩位後開始,若上面變數為true,則擷取s從一位後開始,返回遞迴

若p的下乙個字元不為"*"以及變數為true,則擷取s和p一位後開始遞迴

**

class

solution

else

}}

思想

初始化陣列,dp[s.length()+1][p.length+1],用於儲存子問題結果

兩層迴圈,外面迴圈s,裡面迴圈p

第一次判斷,與上面的相同,看是否相等或者p為

「.」,記錄變數。

如果s的下乙個為"*",且記錄的變數為false,則記錄d[i][j]為d[i][j+2],若為true記錄為d[i+1][j]

如果不為"*",則直接記錄d[i][j]為d[i+1][j+1],遍歷完成返回dp[0][0]

**

class

solution

else}}

return dp[0]

[0];

}}

基本上所有的演算法判斷的思路都是一樣的,不同的是處理的方式,遞迴方式一般是不推薦使用的,不停的呼叫函式很浪費時間,而這個問題屬於比較典型的動態規劃,判斷完乙個字元判斷下乙個,而時間也比遞迴 要少得多。

正規表示式 匹配

字串 void abtr quint32 ab 表示乙個正規表示式 template class bidirectionaliterator class allocator std allocator sub match bidirectionaliterator class match resul...

正規表示式匹配

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

正規表示式匹配

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