日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

leetcode 10 --- 正则表达式匹配

發布時間:2024/7/23 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode 10 --- 正则表达式匹配 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 題目

給你一個字符串?s?和一個字符規律?p,請你來實現一個支持 '.'?和?'*'?的正則表達式匹配。

'.' 匹配任意單個字符
'*' 匹配零個或多個前面的那一個元素
所謂匹配,是要涵蓋?整個?字符串?s的,而不是部分字符串。

2 思路

使用動態規劃的方法, 開辟一個大小是(s_size + 1) * (p_size + 1)的二維數組Match, Match[i][j]代表著s的前i個字符和p的前j個字符是否匹配, 要獲取Match[i][j]的值首先要觀察s的第i個字符(s[i - 1])和p的第j個字符(p[j - 1])的關系.

如果s[i - 1] =?p[j - 1]或者是p[j - 1]為'?. ', 那么s的前i個字符和p的前j個字符是否匹配取決于s的前i - 1個字符和p的前j - 1個字符是否匹配.

如果不滿足上述條件, 但是p[j - 1]為' * ', 那么就需要觀察' * '前面的字符(p[j - 2])和s的第i個字符的關系:

  • 如果s[i - 1] =?p[j - 2]或者是p[j - 2]為'?. ', 也就是說, 假設匹配上的字符是a(p[j - 2] = a), 那么如果此時我們可以用任意個數的a加在p的前j-2個字符的后面看是否匹配, 那么此時我們不用一個一個枚舉我們加了多少個a, 只需要枚舉加了一個a還是不加a, 因為加了一個a的話就是看s的前i-1個字符跟p的前j-2個字符是否匹配, 它可以重復這個過程, 最終遍歷所有情況, 不加a的話就是看s的前i個字符跟p的前j-2個字符是否匹配, 以上兩種情況只要有一種滿足匹配上就能保證s的前i個字符和p的前j個字符匹配得上, 所以可以進行抑或運算.
  • 如果p[j - 1]為' * ', 但是不滿足上面的s[i - 1] =?p[j - 2]或者是p[j - 2]為'?. ', 那么*前面的字符就一個都不能用了, 只能用0個, 也就是說此時就只能看s的前i個字符跟p的前j-2個字符是否匹配.

所以代碼如下:

bool isMatch(string s, string p) {int s_size = s.size();int p_size = p.size();vector<vector<int> > Match;for (int i = 0; i <= s_size; i ++) {vector<int> tmp;tmp.resize(p_size + 1);Match.push_back(tmp);}Match[0][0] = 1;for (int i = 0; i <= s_size; i ++) {for (int j = 1; j <= p_size; j ++) {if (i == 0) {//當i是0的時候,也就是說此時s一個字符也沒有,如果此時p有字符, 那么每個字符后面//必須有*,代表著這些字符都是0個的時候才能匹配上,否則就匹配不上.Match[i][j] = p[j - 1] == '*' ? Match[i][j - 2] : 0;} else {if (s[i - 1] == p[j - 1] || p[j - 1] == '.') {Match[i][j] = Match[i - 1][j - 1];} else if (p[j - 1] == '*') {if (s[i - 1] == p[j - 2] || p[j - 2] == '.') {Match[i][j] = Match[i - 1][j] | Match[i][j - 2];} else {Match[i][j] = Match[i][j - 2];}}}}}return Match[s_size][p_size]; }

?

總結

以上是生活随笔為你收集整理的leetcode 10 --- 正则表达式匹配的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。