算法练习(13):Regular Expression Matching

来源:互联网 发布:java long 类型长度 编辑:程序博客网 时间:2024/06/18 13:48

题意:实现一个正则匹配函数,判断输入的正则式和输入的字符串是否匹配,规则如上图

分析与思路:这道题要是没有*,就是个非常容易的题目,但是加了个*,就要特殊处理了,因为*是不限制个数的,所以很容易就想到了循环或者递归来处理这个情况。而我的想法是用递归来实现的,把匹配完的部分都截掉,这样就可以明确了*的位置,也就是下标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));}//无*的情况}};


阅读全文
0 0
原创粉丝点击