154. Coincidencia de expresiones regulares

154. Coincidencia de expresiones regulares
 

La implementación admite la coincidencia de expresiones regulares de '.' Y '*'.

'.' coincide con cualquier letra.

'*' coincide con cero o más elementos precedentes.

La coincidencia debe cubrir toda la cadena de entrada, no solo una parte.

La función a implementar es: bool isMatch (string s, string p)

isMatch ("aa", "a") → falso

isMatch ("aa", "aa") → verdadero

isMatch ("aaa", "aa") → falso

isMatch ("aa", "a *") → verdadero

isMatch ("aa", ". *") → verdadero

isMatch ("ab", ". *") → verdadero

isMatch ("aab", "c * a * b") → verdadero
样例

Ejemplo 1:

Entrada: "aa", "a"
Salida: falsa
Explicación:
No se puede coincidir

Ejemplo 2:

Entrada: "aa", "a *"
Salida: verdadera
Explicación:
'*' puede repetir una

bool isMatch (string & s, string & p)
{     // escriba su código aquí     int srcLen = s.size ();     int dstLen = p.size ();


    int i = 0;
    int j = 0;

    while (i <srcLen)
    {

        char aa = s [i];
        char bb = p [j];

        if (p [j] == '.' && p [j + 1] == '*' && dstLen == 2)
        {             return true;

        }
        más si (j + 2 <dstLen && p [j] == '.' && p [j + 1] == '*' && srcLen == 2 && dstLen> 2 && p [j + 2]! = ' * ')
        {             devolver falso;

        }
        else if (p [j] == '.' && p [j + 1] == '*')
        {             if (s [i] == s [i + 1])             {                 while (s [i] = = s [i + 1])                 {                     i ++;                 }                 i ++;                 j = j + 2;             }             más si (s [i]! = s [i + 1] && s [i]! = p [j + 2])             {                 j = j + 2;                 i = i + 1;             }             más             {                 j = j + 2; // 把. * 当作 0 处理             }         }         else if (p [j] == '.'




















        {             i ++;             j ++;         }         más si (s [i]! = p [j] && j + 1 <dstLen && p [j + 1] == '*')         {             j = j + 2;         }         else if (j == dstLen - 1 && i! = srcLen - 1 && p [j]! = '*')         {             return false;         }         else if (j! = dstLen - 1 && i == srcLen - 1)         {             if (j + 1 <dstLen)             {                 while (j + 1 <dstLen && p [j + 1] == '*')                 {                     j = j + 2;




















                {                     devuelve verdadero;                 }             }         }         más si (s [i] == p [j])         {             i ++;             j ++;         }         más si (j == dstLen - 1 && i == srcLen - 1 && s [i]! = p [j] && p [j]! = '*' && p [j]! = '.')         {             falso retorno;         }         más si (i == srcLen)         {             si (p [j] == '*'





















                        devuelve verdadero;
                    }
                }
            }
        }
        else if (p [j] == '*')
        {             if (s [i] == s [i - 1])             {                 while (i + 1 <srcLen && s [i] == s [ i + 1])                 {                     i ++;                 }                 i ++;                 j ++;             }             más si (j + 1 <dstLen) // 把 * 前面 当作 0 个             {                 j = j + 1;             }             más si (p [j + 1]! = s [i - 1])             {















                falso retorno;
            }
            más
            {                 j = j + 1;             }         }         else         {             devolver falso;         }







    }

    if (j <dstLen - 1)
    {         devuelve falso;     }

    devuelve verdadero;
}


prueba void ()
{     / *     cadena s = "aaaab";     cadena p = "a * a * a * a * c"; * /



    // cadena s = "aa";
    // cadena p = "a *";

    // cadena s = "bbabacccbcbbcaaab";
    // cadena p = "a * b * a * a * c * aa * c * bc *";

    / * cadena s = "ab";
    cadena p = ". * c";
* /

    // cadena s = "bbbba";
    // cadena p = ". * a * a";


    // cadena s = "acaabbaccbbacaabbbb";
    // cadena p = "a *. * b *. * a * aa * a *";


    cadena s = "aasdfasdfasdfasdfas";
    cadena p = "aasdf. * asdf. * asdf. * asdf. * s";

    bool ret = isMatch (s, p);

}

 

 

Supongo que te gusta

Origin blog.csdn.net/yinhua405/article/details/110622122
Recomendado
Clasificación