タイトル説明
備えるに「と一致する機能」と「*」正規表現を実装します。モード文字が「」 『*』任意の1つの文字を表し前の文字が(0時間を含む)任意の回数現れることができることを示しています。この問題では、試合全体のパターンが文字列のすべての文字に一致しています。たとえば、文字列「AAA」モードと「AA」と「AB * AC *」試合が、「aa.a」と「abが*」一致しません。
分析
ポインタの動き。
モードが「*」二番目の文字ではない場合である:
1、パターンの最初の文字と、最初の文字が文字列と文字、その後、後方のモード、残りの試合に一致する場合。
最初の文字と、最初の文字パターンが位相と一致しない場合2は、直接、falseを返します。
:第二のモードは、文字「*」である場合と
モードマッチングの三種類が存在してもよい:
文字をシフトモードの後1、2、X *に対応する無視され、
図2に示すように、文字列の移動、シフトパターンの後に2 ;文字、X *は、文字の等価一致
*数と一致するため、図3に示すように、1つの文字列、次の文字の場所と一致し続ける同じパターンを移動します。
コード
class Solution {
public:
bool match(char* str, char* pattern)
{
if (*str == '\0' && *pattern == '\0')
return true;
// 1.匹配带*正则(包括非贪心情况)
if (*str == *pattern || (*pattern == '.' && *str != '\0'))
{
// 不是正则式
if (*(pattern + 1) != '*')
return match(++str, ++pattern);
// 是正则式
// 将*字符的匹配一分为二的处理
return match(str, pattern + 2) || match(str + 1, pattern);
}
// 消去无用带*字符
else if (*(pattern + 1) == '*')
{
pattern += 2;
return match(str, pattern);
}
return false;
}
};