Experiencia de entrevista para pasante de Google STEP

La preselección se realizó a través de nuestra universidad en base a nuestro currículum y rendimiento académico. Fui preseleccionado y tuve dos entrevistas de 45 minutos, cada una con un descanso de quince minutos entre ellas. Ambos fueron rondas técnicas que involucraron codificación práctica en un documento de Google compartido mientras estaba en una videollamada a través de Hangouts con el entrevistador de Google.

La ronda 1: 

Pregunta: Una expresión booleana se da en forma de string. Contiene una variable x; operadores lógicos – ‘y’, ‘o’ y operadores relacionales – ‘>’, ‘<‘ (no hay >= ni <=). Averigüe si la expresión siempre se evalúa como Falsa. En caso afirmativo, genere Falso; de lo contrario, si existe al menos una x tal que la expresión dada pueda ser verdadera, genere verdadero.

Ejemplo:

1. “x<0 yx>5”

Salida – Falso

Explicación: esto nunca puede ser cierto ya que no hay ‘x’ como x<0 y x>5. Entonces, la expresión booleana dada siempre se evalúa como falsa.

2. “x>0 o x<-1”

Salida – Verdadero

Explicación: tenemos al menos una ‘x’ para la cual la expresión booleana dada se evalúa como verdadera. Por ejemplo, ponga x=2 en la expresión dada y se evalúa como verdadero.

Sugerencia:  siempre que haya solo ‘o’ en la expresión booleana, el resultado siempre es verdadero. (Por ejemplo: x>0 o x<0: existe algo de x tal que esto es verdadero y cualquiera que sea la última parte de la expresión, se evalúa como verdadero ya que solo ‘o’ está presente. Si no hay ‘o’ presente (solo ‘y’ está allí), luego verificamos las expresiones: si encuentra al menos dos expresiones contradictorias como en el ejemplo 1 (es decir, sus conjuntos de soluciones son disjuntos), entonces el resultado es Falso (ya que solo tenemos ‘y’ ‘ operación lógica que se evalúa como False a menos que todas las expresiones sean True), de lo contrario, es True.

No tengo idea de cómo abordar el problema cuando ambos ‘y’, ‘o’ están presentes en la expresión, y no pude encontrar ese problema en ninguna parte de Internet.

Le pido a alguien que lea este artículo que contribuya amablemente con el código a este problema. (preferiblemente en C++)

//Write Java code here
  
public class BooleanExp {
  
    public static void main(String[] args) {
        String exp1 = "x<0 and x<-5 and x>100";
        String exp2 = "x<0 and x<5";
        String exp3 = "x>5 and x<0";
        String exp4 = "x<0 or x>5";
        String exp5 = "x>5 and x<0 and x<100";
        String exp6 = "x<-100 and x>100";
  
        GetDomain(exp1);
        GetDomain(exp2);
        GetDomain(exp3);
        GetDomain(exp4);
        GetDomain(exp5);
        GetDomain(exp6);
    }
  
    public static void GetDomain(String exp) {
        if (exp.contains("or")) {
            System.out.println("true");
            return;
        }
        String subExp[] = exp.split(" ");
        int domain[] = new int[10];
        String strDomain = "";
        Boolean flag = true;
        int value;
        for (int i = 0; i < subExp.length; i++) {
            if (!subExp[i].equals("and")) {
                if (subExp[i].charAt(1) == '<') {
  
                    if (subExp[i].charAt(0) == 'x') {
                        if (strDomain.isEmpty())
                            strDomain = "<" + subExp[i].substring(2);
                        else if (strDomain.charAt(0) == '>' && Integer.parseInt(subExp[i].substring(2)) < Integer
                                .parseInt(strDomain.substring(1))) {
                            flag = false;
                            break;
                        }
                    } else {
                        if (strDomain.isEmpty())
                            strDomain = ">" + subExp[i].substring(2);
                        else if (strDomain.charAt(0) == '<' && Integer.parseInt(subExp[i].substring(2)) > Integer
                                .parseInt(strDomain.substring(1))) {
                            flag = false;
                            break;
                        }
                    }
  
                } else if (subExp[i].charAt(1) == '>') {
  
                    if (subExp[i].charAt(2) == 'x') {
                        if (strDomain.isEmpty())
                            strDomain = "<" + subExp[i].substring(2);
                        else if (strDomain.charAt(0) == '>' && Integer.parseInt(subExp[i].substring(2)) < Integer
                                .parseInt(strDomain.substring(1))) {
                            flag = false;
                            break;
                        }
                    } else {
                        if (strDomain.isEmpty())
                            strDomain = ">" + subExp[i].substring(2);
                        else if (strDomain.charAt(0) == '<' && Integer.parseInt(subExp[i].substring(2)) > Integer
                                .parseInt(strDomain.substring(1))) {
                            flag = false;
                            break;
                        }
                    }
  
                }
            }
        }
        System.out.println(flag);
    }
  
}
  
// This code is contributed by Arsalaan Javed

Salida:
falso
verdadero
falso
verdadero
falso
falso

La ronda 2: 

Pregunta: Dada una string, encuentre el número mínimo de cortes para dividir la string de modo que todas las substrings resultantes sean palíndromos.

Ejemplo: «google»

Salida: 2

Explicación: número mínimo de cortes para dividir «google» en palíndromos = 2, es decir:

goog|l|e – donde ‘|’ hace referencia a un corte, los tres palíndromos resultantes son “goog”, “l”, “e”. Por lo tanto, el número mínimo de cortes necesarios = 2.

Sugerencia:  consulte  este  artículo.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *