关闭

Regular Expression Matching

标签: c++class源码经验
333人阅读 评论(0) 收藏 举报
分类:


        题目要求这里不再赘述,有两点点需要注意:

一、"*" 所代表的含义是代表其之前的字符的0个或多个重复。如 “a*” 代表 'a' 后面跟0个或者多个字符 'a';

二、用 C++ 实现的话后面函数的入参是 string 型,在这里按字符处理的时候有诸多不便,可以转换为 char * 进行处理。

class Solution {
public:
    bool isMatchChar(const char *s, const char *p){
	if(*p == '\0')
		return *s == '\0';
	if(*(p + 1) != '*'){
		if(*s != '\0' && (*p == *s || *p == '.')){
			return isMatchChar(s + 1, p + 1);
		}else{
			return false;
		}
	}else{
		while(*s != '\0' && (*s == *p || *p == '.')){
			if(isMatchChar(s, p + 2))
				return true;
			s++;
		}
		return isMatchChar(s, p + 2);
	}
}

bool isMatch(string s, string p) {
    int lens = s.length();
    int lenp = p.length();

	char* schar = new char[lens + 1];
	char* pchar = new char[lenp + 1];
	strcpy(schar, s.c_str());
	strcpy(pchar, p.c_str());
	schar[lens] = '\0';
	pchar[lenp] = '\0';

	return isMatchChar(schar, pchar);
}

};





0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:31342次
    • 积分:837
    • 等级:
    • 排名:千里之外
    • 原创:53篇
    • 转载:3篇
    • 译文:0篇
    • 评论:7条
    最新评论