Regular Expression Matching



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

一、"*" 所代表的含义是代表其之前的字符的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);
}

};

 
  



你可能感兴趣的:(leetcode,c++,class,源码,经验)