劍指Offer 正規表示式的匹配

2021-10-03 08:27:46 字數 1408 閱讀 6722

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

動態規劃:

1、首先寫出dp矩陣,定義dp矩陣中元素的意義,最好能夠畫圖說明

2、列舉矩陣中哥哥元素之間的關係,即狀態轉移方程,一般為dp[i][j]與dp[i-1][j],dp[i][j-1],dp[i-1][j-1]之間的關係。

3、定義矩陣的初始值。

public boolean ismatch

(string s,

string p)

}for

(int i =

1;i)else

else

if(p.

charat

(j-1)==

'*')

if(p.

charat

(j-2

)==s.

charat

(i-1

)|| p.

charat

(j-2)==

'.')

}else}}

}return dp[slen]

[plen]

;}

改進優化當p[j-1]字元為』*'的情況

當p[j-1]字元為*時,不管p[j-2]與s[i-1]是否相同,我們都可以將p[j-1]與p[j-2]去掉。

dp[i]

[j]= dp[i]

[j]|| dp[i]

[j-2

];

當p[j-1]字元為時,並且表示多個字元的情況,只有當p[j-2]==s[i-1]或者 '『之前的符號為』.'時。

if

(p.charat

(j-2

)==s.

charat

(i-1

)|| p.

charat

(j-2)==

'.')

**優化:

if

(p.charat

(j-2

)==s.

charat

(i-1

)|| p.

charat

(j-2)==

'.')

dp[i]

[j]= dp[i]

[j]|| dp[i]

[j-2];

//不管p中*前一位是否與s的當前位相同,可以直接將p中*與*的前一位去掉

劍指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 均不匹配.分析 觀察模式串中第...