leetcode 10、Regular Expression Matching
生活随笔
收集整理的這篇文章主要介紹了
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS7安装详解
- 下一篇: Jeewx-api 1.1 版本发布,微