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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

leetcode 10、Regular Expression Matching

發布時間:2025/3/16 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode 10、Regular Expression Matching 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本題大意: 給你一個字符串s, 以一個模式串p,而模式串中規則匹配的只有 '.' 和 ‘*’,其中 ‘.’ 代表匹配任意一個字符,‘*’ 代表匹配的前一個字符有0個或多個,求字符串s和模式串p是否匹配?

題解:本題利用遞歸的思想使用模式串p去匹配字符串s;

1、當p為空的時候,s為空返回true,否則返回false

2、當p只有一個字符時,s 中的字符是否為1并且 (s[0] == p[0] or p[0] == '.');

3、當p[1] != '*'時, 判斷s是否為空,是返回false, 否則返回(s[0] == p[0] or p[0] == '.') && isMatch(s.substr(1), p.substr(1))

? ? ? substr(start) 表示截取從字符串start的位置到字符串的末尾

4、當p[1] == '*'時, 判斷s是否為空 并且?(s[0] == p[0] or p[0] == '.'); 當s和p.substr(2)匹配時直接返回true(由于*可以匹配的前一個字符可以是0個,所以如果s和p.substr(2)匹配,前面的可以認為是0個,是符合模式匹配串的),如果不匹配則s = s.substr(1)

5、返回isMatch(s, p.substr(2))

?

#include <iostream> using namespace std;bool isMatch(string s, string p) {if (p.empty()) return s.empty();if (p.size() == 1){return (s.size() == 1 && (s[0] == p[0] || p[0] == '.'));}if (p[1] != '*'){if (s.empty()) return false;return (s[0] == p[0] || p[0] == '.') && isMatch(s.substr(1), p.substr(1));}while (!s.empty() && (s[0] == p[0] || p[0] == '.')){if (isMatch(s, p.substr(2))) return true;s = s.substr(1);}return isMatch(s, p.substr(2)); }int main() {string s = "ab";string p = "a*";cout << isMatch(s, p) << endl; }

?

?

?

?

?

?

?

?

?

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的leetcode 10、Regular Expression Matching的全部內容,希望文章能夠幫你解決所遇到的問題。

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