Java LeetCode 10. Coincidencia de expresiones regulares

Déle una cadena sy una regla de carácter p, por favor venga e implemente una coincidencia de expresión regular

que admita '.' Y ' '. "." coincide con cualquier carácter " " coincide con cero o más del elemento anterior. La
llamada coincidencia es para cubrir la cadena completa s, no parte de la cadena.
Ejemplo 1:
Entrada: s = "aa" p = "a"
Salida: falso
Explicación: "a" no puede coincidir con la cadena completa de "aa".
Ejemplo 2:
Entrada: s = "aa" p = "a
"
Salida: verdadera
Explicación: Porque '*' significa que puede coincidir con cero o más elementos del elemento anterior, donde el elemento anterior es 'a'. Por tanto, la cadena "aa" puede considerarse como 'a' repetida una vez.
*

Utilice la recursividad para comparar dos cadenas en cada nivel.
Hay dos situaciones para cada comparación.

En el primer caso, no hay signo *. En este caso, si los dos caracteres son iguales o hay un símbolo '.', Directamente puede devolver verdadero

En el segundo caso, el siguiente carácter es el signo '*', entonces el símbolo puede indicar el reemplazo de 0 o un número infinito. Si hay 0, se juzgará la relación entre los dos siguientes de derecha e izquierda, y si hay son un número infinito, entonces se juzgará. Compare la izquierda + 1 con la derecha actual

class Solution {
    
    
    public boolean isMatch(String s, String p) {
    
    
        return iss(s,0,p,0);
    }
    public boolean iss(String s,int left,String p,int right){
    
    
        if(p.length()==right){
    
    
            return left==s.length();
        }

        boolean isMatch = left<s.length()&&(s.charAt(left)==p.charAt(right)||p.charAt(right)=='.');

        if(right<=p.length()-2&&p.charAt(right+1)=='*'){
    
    
            return iss(s,left,p,right+2)||(isMatch&&iss(s,left+1,p,right));
        }

        return isMatch&&iss(s,left+1,p,right+1);
    }
}

Supongo que te gusta

Origin blog.csdn.net/sakura_wmh/article/details/113100513
Recomendado
Clasificación