<10>——Regular Expression Matching
2017-09-03 11:44
323 查看
10、Regular Expression Matching
正则表达式匹配
实现支持'.'和'*'的正则表达式匹配。'.'匹配任意一个字母。
'*'匹配零个或者多个前面的元素。
匹配应该覆盖整个输入字符串,而不仅仅是一部分。
样例
isMatch("aa","a") → false
isMatch("aa","aa") → true
isMatch("aaa","aa") → false
isMatch("aa", "a*") → true
isMatch("aa", ".*") → true
isMatch("ab", ".*") → true
isMatch("aab", "c*a*b") → true
代码:
class Solution { public: bool isMatch(string s,string p,int s_st,int p_st) { if(p_st==p.length())//有可能出现(a,aa*)的情况,所以先匹配p的长度 return s_st==s.length(); if(p[p_st+1]!='*')//下一元素不是* { if((s[s_st]!='\0'&&p[p_st]=='.')||s[s_st]==p[p_st]) return isMatch(s,p,s_st+1,p_st+1); return false; } while((s[s_st]!='\0'&&p[p_st]=='.')||s[s_st]==p[p_st]) {//出现‘*’的情况 if(isMatch(s,p,s_st,p_st+2))return true;//跳过‘?*’查找 s_st++;//不匹配则s后移,继续比对 }//s_st++递增会影响非‘*'情况的匹配,所以‘*’情况应该后写 return isMatch(s,p,s_st,p_st+2);//(aab,c*a*b)情况,直接跳过c* } bool isMatch(string s, string p) { return isMatch(s,p,0,0); } };
相关文章推荐
- Regular Expression Matching
- Regular Expression Matching
- <仅是自己做笔记。。。系列-10>n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。
- [leetcode]Regular Expression Matching @ Python
- Regular Expression Matching
- Regular Expression Matching
- Regular Expression Matching
- Lambda表达式 和 Expression<T>
- LeetCode——Regular Expression Matching
- Regular Expression Matching - LeetCode
- [leetcode] 10 Regular Expression Matching
- LeetCode OJ算法题(十):Regular Expression Matching
- leetcode_010 Regular Expression Matching
- const_cast<type_id> (expression)
- LeetCode (10)Regular Expression Matching
- Leetcode-Regular Expression Matching
- Leetcode : Regular Expression Matching
- Implementation of Regular Expression Matching
- Regular Expression Matching (Java)
- Regular Expression Matching