📜  谷歌STEP实习生面试经历

📅  最后修改于: 2021-11-16 08:01:30             🧑  作者: Mango

入围名单是通过我们的大学根据我们的简历和学习成绩完成的。我入围并接受了两次 45 分钟的面试,每次中间有 15 分钟的休息时间。当我通过环聊与 Google 的面试官进行视频通话时,这两次都是技术回合,涉及在共享的 Google 文档中进行动手编码。

第1轮:

问题:布尔表达式以字符串的形式给出。它包含一个变量 x;逻辑运算符——“and”、“or”和关系运算符——“>”、“<”(没有 >= 或 <=)。查找表达式的计算结果是否始终为 False。如果是,输出 False,否则如果至少存在一个 x 使得给定的表达式可以为真,则输出真。

例子:

提示:只要布尔表达式中只有 ‘or’,结果总是为真。 (例如:x>0 或 x<0 – 存在一些 x 使得这是真的,无论表达式的后半部分是什么,它都会评估为真,因为只有“或”存在。如果不存在“或” (只有“and”),然后我们检查表达式——如果你发现至少两个矛盾的表达式,如示例 1(即它们的解集不相交),那么输出为 False(因为我们只有 ‘and ‘ 逻辑运算,除非所有表达式都为真,否则其值为假),否则为真。

当表达式中同时存在“和”、“或”时,我不知道如何解决这个问题,而且我在互联网上的任何地方都找不到这样的问题。

我请求阅读这篇文章的人友好地贡献代码来解决这个问题。 (最好在 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

第二轮:

问题:给定一个字符串,找到分割字符串的最小切割次数,以便所有结果子串都是回文。

提示:参考这篇文章。