算法练习(13):Regular Expression Matching
2017-10-12 14:10
417 查看
题意:实现一个正则匹配函数,判断输入的正则式和输入的字符串是否匹配,规则如上图
分析与思路:这道题要是没有*,就是个非常容易的题目,但是加了个*,就要特殊处理了,因为*是不限制个数的,所以很容易就想到了循环或者递归来处理这个情况。而我的想法是用递归来实现的,把匹配完的部分都截掉,这样就可以明确了*的位置,也就是下标1的位置,这样就需要判断首字符了。*的处理方法呢,我分为0个和多个两种情况,多个的话,我采取一个个匹配的方法。
代码:
#include<iostream>
#include<string>
using namespace std;
string subString(string fa, int i) {//取子字符串
return string(fa, i, fa.length() - i);
}
class Solution {
public:
bool isMatch(string text, string pattern) {
if (pattern.length() == 0) return text.length() == 0;//匹配模式为空的情况
bool firstmatch = 0;
if ((text.length() != 0) && (pattern[0] == text[0] || pattern[0] == '.')) {//判断第一个字符是否匹配
firstmatch = true;
}
else firstmatch = false;
if (pattern.length() >= 2 && pattern[1] == '*') {//判断有*的情况
return (isMatch(text, subString(pattern, 2)) || (firstmatch&&isMatch(subString(text, 1), pattern)));
}//*代表0个的情况和多个的情况
else {
return firstmatch&&isMatch(subString(text, 1), subString(pattern, 1));
}//无*的情况
}
};
相关文章推荐
- 算法分析课每周练习 Regular Expression Matching
- 算法课第1周第2题——10. Regular Expression Matching
- 【LeetCode010算法/编程练习C++】Regular Expression Matching//挺烦的一条……
- 多正则表达式匹配 (Multiple Regular Expression Matching) 中的动态 DFA 算法
- 多正则表达式匹配 (Multiple Regular Expression Matching) 中的动态 DFA 算法
- LeetCode Online Judge 题目C# 练习 - Regular Expression Matching
- 【LeetCode算法练习(C++)】Regular Expression Matching
- LeetCode -- Regular Expression Matching 【算法】
- (算法分析Week9)Regular Expression Matching[Hard]
- python写算法题:leetcode: 10. Regular Expression Matching
- 算法第12周Regular Expression Matching[hard]
- LeetCode算法题目: Regular Expression Matching
- [LeetCode] Regular Expression Matching, Solution
- Regular Expression Matching
- leetcode-10Regular Expression Matching
- Regular Expression Matching
- [LeetCode]Regular Expression Matching、Wildcard Matching
- LeetCode - Regular Expression Matching
- leetcode hard模式专杀之10Regular Expression Matching
- Regular Expression Matching