zoukankan      html  css  js  c++  java
  • 美团校招-表达式求值

    题目描述

    给出一个布尔表达式的字符串,比如:true or false and false,表达式只包含true,false,and和or,现在要对这个表达式进行布尔求值,计算结果为真时输出true、为假时输出false,不合法的表达时输出error(比如:true true)。表达式求值是注意and 的优先级比 or 要高,比如:true or false and false,等价于 true or (false and false),计算结果是 true。

    我的题解

    import java.util.Scanner;
    public class expression2bool {
        public static void main(String[] args) {
           int res = expression2bool.func();
           if (res==0) System.out.println("error");
           else if (res==1) System.out.println("true");
           else System.out.println("false");
        }
    
        public static int func(){//0:error  1:true  2:false
            Scanner sc = new Scanner(System.in);
            String inp = sc.nextLine();
            sc.close();
            String []expArr = inp.split(" ");
            int len = expArr.length;
            int arr [] = new int[len];//字符串比较太麻烦,太耗时,转整数。  0:false,1:true, 2:and, 3: or
            if (len%2==0) return 0;//长度为偶数,一定不合法,直接返回
            String exp ;
            char c;
            for (int i=0;i<len;i++){//先转整数,同时判断输入是否合法
                exp= expArr[i];
                c = exp.charAt(0);
                if (i%2==0){
                    if (c=='t')arr[i]=1;
                    else if (c=='f')arr[i]=0;
                    else return 0;
                }else{
                    if (c=='o')arr[i]=3;
                    else if (c=='a')arr[i]=2;
                    else return 0;
                }
            }
    
            //处理and:把and先计算掉
            for (int i=1;i<len-1;i+=2){
                if (arr[i]==2){
                    if (arr[i-1]+arr[i+1]<2){
                        arr[i-1]=0;
                        arr[i+1]=0;
                    }
                }
                //这里其实可以优化,如果前面出现true,同时不影响后面的and就可以直接返回true了,不用后面的遍历判断
            }
            //存在一个true即返回true,因为现在只有or,一个true或上任何值都是true
            for (int i=0;i<len;i+=2){
                if (arr[i]==1)return 1;
            }
            return 2;
        }
    }
    
  • 相关阅读:
    CREATE AGGREGATE
    技术文档列表
    jQuery 判断表单中多个 input text 中至少有一个不为空
    Java实现 蓝桥杯 算法提高 奥运会开幕式
    Java实现 蓝桥杯 算法提高 最长滑雪道
    Java实现 蓝桥杯 算法提高 最长滑雪道
    Java实现 蓝桥杯 算法提高 最长滑雪道
    Java实现 蓝桥杯 算法提高 最大值路径
    Java实现 蓝桥杯 算法提高 最大值路径
    Java实现 蓝桥杯 算法提高 最大值路径
  • 原文地址:https://www.cnblogs.com/XT-xutao/p/12629242.html
Copyright © 2011-2022 走看看