請實現乙個函式用來匹配包含』. 『和』『的正規表示式。模式中的字元』.『表示任意乙個字元,而』'表示它前面的字元可以出現任意次(含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 均不匹配.分析 觀察模式串中第...