1. 程式人生 > >《劍指offer》正則表示式匹配

《劍指offer》正則表示式匹配

【 宣告:版權所有,轉載請標明出處,請勿用於商業用途。  聯絡信箱:[email protected]

題目描述
請實現一個函式用來匹配包括'.'和'*'的正則表示式。模式中的字元'.'表示任意一個字元,而'*'表示它前面的字元可以出現任意次(包含0次)。 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串"aaa"與模式"a.a"和"ab*ac*a"匹配,但是與"aa.a"和"ab*a"均不匹配

思路
如果模式串此時是'.',那麼只需要模式串與匹配串都往後移動一個位置即可
如果現在這位的字元能匹配且且模式串的下一位是'*',我們則需要分情況討論
1.匹配串往後移動1位,模式串跳過'*'


2.匹配串往後移動1位,模式串不動
3.匹配串不動,模式串跳過'*'

class Solution
{
	public:
		bool match(char* str, char* pattern)
		{
			if(str==nullptr || pattern==nullptr)
				return false;
			return matchCore(str,pattern);
		}
		bool matchCore(char *str,char *pattern)
		{
			if(*str=='\0' && *pattern=='\0')
				return true;
			if(*str!='\0' && *pattern=='\0')
				return false;

			if(*(pattern+1)=='*')
			{
				if(*str==*pattern || (*pattern=='.' && *str!='\0'))
					return matchCore(str+1,pattern+2)||matchCore(str+1,pattern)||matchCore(str,pattern+2);
				else
					return matchCore(str,pattern+2);
			}
			if(*str==*pattern || (*pattern=='.' && *str!='\0'))
				return matchCore(str+1,pattern+1);
			return false;
		}
};