título Descrição
Implementar compreende uma função para combinar '' e '*' expressão regular. caráter Mode '' Representa qualquer caractere '*' indica que o caractere precedente pode aparecer qualquer número de vezes (incluindo 0 tempo). Neste problema, o jogo é todo um padrão corresponde a todos os caracteres da cadeia. Por exemplo, a string "aaa" modo e "aa" e "ab * ac * um" jogo, mas o "aa.a" e "ab * a" não coincidem.
análise
movimento do ponteiro.
Quando o modo não é o segundo carácter "*" é:
1, se o primeiro carácter e o primeiro caractere no padrão corresponde a seqüência de caracteres e um caráter modos de trás, e as partidas restantes.
2, se o primeiro caractere e o primeiro padrão de caracteres não coincide com a fase retorna diretamente falsa.
E quando o segundo modo é o caractere "*" é:
pode haver três tipos de modo correspondente:
1, 2, após o modo de deslocamento de caráter, correspondente a x * é ignorada;
2, após uma jogada cadeia de caracteres, o padrão Shift 2 caráter, x * corresponde apenas o equivalente a um personagem;
3, mova uma cadeia de caracteres, o mesmo padrão que continua a corresponder ao próximo lugar caráter, porque * corresponde a um número;
código
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;
}
};