• 乐元素笔试题-数学公式


       输出:0

    示例2

      输入:"a+bc"

      输出:1

    示例3:    

       输入:"()"

      输出:2

    示例4

      输入:"(a+b]"

      输出:3

    思路

      • 将数学公式的字符串,分为运算表达式 与 括号字符串;

      • 分别判断 运算表达式是否合法,是否缺少变量、运算符;

      • 以及 括号字符换是否匹配。

    import java.util.Stack;
    
    class Solution {
        public int getIlegalReason(String formula){
            String s1 = ""; //记录无括号的公式表达式
            String s2 = ""; //记录括号的字符串
            for(int i = 0; i < formula.length(); i++){
                char c = formula.charAt(i);
                if(c == '(' || c == ')' ||  c == '[' || c== ']' || c == '{' || c == '}') s2 += c;
                else s1 += c; // 分别取出运算表达式的字符串,及 括号匹配字符串
            }
            int res = function(s1);
            boolean flag = isValid(s2);
            if(flag == false) return 3;
            return res;
        }
        public int function(String s){ //判断公式表达式,是否合法
            if(s.length() == 0) return 2;
            for(int i = 1; i < s.length(); i++){
                char c = s.charAt(i);
                if(c == '+' || c == '-' || c == '*' || c == '/'){ //当前字符为运算符
                    if(s.charAt(i-1) >= 'a' && s.charAt(i-1) <= 'z') continue;
                    else return 2; //前一个也是运算符,缺少变量,返回 2
                }
                else{ //当前字符为变量
                    if(s.charAt(i-1) >= 'a' && s.charAt(i-1) <= 'z') return 1;//前一个也是变量,缺少运算符,返回1
                    else continue;
                }
            }
            return 0;
        }
    
        public boolean isValid(String s) { //判断括号是否匹配
            if(s.length() == 0) return true;
            Stack<Character> stack = new Stack<>();
            for(int i = 0; i < s.length(); i++){
                char c = s.charAt(i);
                if(c == '(' || c == '[' || c == '{') stack.push(c); //入栈
                else{
                    if(stack.size() == 0) return false;//判栈空,栈非空才能有元素出栈
                    char top = stack.pop();//出栈
                    if(c == ')' && top == '(') continue;//判断能否配对
                    else if(c == ']' && top == '[') continue;
                    else if(c == '}' && top == '{') continue;
                    else return false; //都不能配对成功,则返回 false
                }
            }
            if(stack.size() > 0) return false;
            return true;
        }
    }

     结果:提交 OJ,显示 AC.

  • 相关阅读:
    leetcode 175 Combine Two Tables join用法
    spark学习及环境配置
    html表格设计
    免费的论文查重网站
    php利用msqli访问数据库并实现分页,
    php利用href进行页面传值的正确姿势
    php+mysql时报错:Unknown column '' in 'field list'解决方案
    使用XMLHttpRequest解析json
    用自定义的函数将gps转换为高德坐标
    WeakHashMap回收时机
  • 原文地址:https://www.cnblogs.com/luo-c/p/13861102.html
Copyright © 2020-2023  润新知