您的位置:首页 > 其它

算法练习(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));
}//无*的情况
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: