劍指offer 正規表示式匹配 (思維,動態規劃)

2021-10-06 08:35:55 字數 787 閱讀 9667

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

解題思路:

首先,我們必須發現一些事實。在從左往右匹配中只可能出現這兩種情況。我們假設str1為字串,str2為模式串。pos1為str1開始匹配的位置,pos2為str2開始匹配的位置。

(1)str1[pos1] != str2[pos2] 且str2[pos2] != '.'

在這種情況下假若 str2[pos2+1] == '*',那麼我們才可以繼續往下匹配。否則return false.

(2)str1[pos1] == str2[pos2] 或者 str2[pos2] == '.'

這時候我們檢查str2[pos2+1]是否為'*',假如不是那麼我們pos1++,pos2++繼續往後匹配。假若是'*',那麼我們可以選擇pos1+1,pos2+2繼續匹配,或者pos1+1,pos2不變繼續往下匹配。本質上是說,我們這個*是繼續用來匹配呢,還是說結束本次匹配,有無窮揹包的意思在裡面。

const int maxn = 1e3;

class solution else mv.push_back(pattern[i]);

}n2 = mv.size();

n1 = n1;n2=n2;

return dfs(0,0);

}};

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