LeetCode OJ --- Regular Expression Matching
2016-03-22 12:10
465 查看
题目描述
Implement regular expression matching with support for ‘.’ and ‘*’.‘.’ Matches any single character.
‘*’ Matches zero or more of the preceding element.
The matching should cover the entire input string (not partial).
The function prototype should be:
bool isMatch(const char *s, const char *p)
Some examples:
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
Code(c++)
//法一: bool isMatch(string s, string p) { int slen = s.length(); int plen = p.length(); if(slen == 0){ for(int i = 0; i < plen; ++i) if(p[i] != '*' && p[i] != '.') return false; return true; } if(plen == 0) return false; if(plen == 1 || p[1] != '*'){ if(p[0] == s[0] || p[0] == '.') return isMatch(s.substr(1), p.substr(1)); else return false; } else{ int i = 0; while(i <= slen && !isMatch(s.substr(i), p.substr(2))) i++; if(i > slen) return false; return true; } }
//法二: bool isMatch(string s, string p) { int slen = s.length(); int plen = p.length(); if(slen == 0){ for(int i = 0; i < plen; ++i) if(p[i] != '*' && p[i] != '.') return false; return true; } if(plen == 0) return false; if(plen == 1 || p[1] != '*'){ if(p[0] == s[0] || p[0] == '.') return isMatch(s.substr(1), p.substr(1)); else return false; } else{ if(p[0] == s[0] || p[0] == '.') return isMatch(s, p.substr(2)) || isMatch(s.substr(1), p); else return isMatch(s, p.substr(2)); } }
note:
这种匹配类题目,最快想到的方法应该就是用递归的方式来解决相关文章推荐
- iOS 百度推送
- Leetcode #19. Remove Nth Node From End of List 移除倒数第N个链表节点 解题小节
- C# 流总结
- APP界面设计之页面布局的22条基本原则
- 控制 .net框架的RichTextBox的粘贴事件(为了只粘贴纯文本),怎么办?
- ZOJ1100Mondriaan's Dream
- latex自定义命令
- C# 堆栈(Stack)
- Tesseract-ocr的安装
- buptoj 941:Mr.L's Journey
- 蓝桥杯 基础练习 查找整数
- 几行代码实现图片的模糊效果
- RTX 组织架构刷新不出来
- CocoaPods 找不到头文件
- Git存储用户名和密码(明文需谨慎)
- 第十九讲--实例崩溃恢复原理剖析
- 第二章--类型运算符表达式
- Git存储用户名和密码(明文需谨慎)
- 蓝桥杯 基础练习 数列特征
- LeetCode--242. Valid Anagram