Advertisement
niks1234

Untitled

Mar 13th, 2025
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.22 KB | Source Code | 0 0
  1. class Solution {
  2.  
  3.     private boolean isOperator(char op) {        
  4.         if(op == '+'  || op == '-' || op == '*' || op == '/') return true;
  5.         return false;
  6.     }
  7.  
  8.     private boolean isOperator(String op) {        
  9.         if(op.length()!=1) return false;
  10.         return isOperator(op.charAt(0));
  11.     }
  12.  
  13.     private String trim(String s) {
  14.         StringBuilder ans = new StringBuilder();
  15.         for(char x: s.toCharArray()) {
  16.             if(x!=' ') ans.append(x);
  17.         }
  18.         return ans.toString();
  19.     }
  20.  
  21.     public int calculate(String s) {
  22.         s = trim(s);
  23.         int n = s.length();
  24.         List<String> exp = new ArrayList<>();
  25.         int prev = 0;
  26.         for(int i=0;i<n;i++) {
  27.             if(isOperator(s.charAt(i))) {
  28.                 exp.add(s.substring(prev, i));
  29.                 exp.add(s.substring(i, i+1));
  30.                 prev = i+1;
  31.             }
  32.         }
  33.         exp.add(s.substring(prev));
  34.  
  35.         // System.out.println(exp);
  36.  
  37.         exp = eval(exp, '*', '/');
  38.         exp = eval(exp, '+', '-');
  39.         return Integer.parseInt(exp.get(0));
  40.     }
  41.  
  42.  
  43.     private List<String> eval(List<String> exp, char op1, char op2) {
  44.  
  45.         Stack<String> st = new Stack<>();
  46.         int size = exp.size();
  47.  
  48.         for(int i=0;i<size;i++) {
  49.             String x = exp.get(i);
  50.             if(isOperator(x) && (x.charAt(0) == op1 || x.charAt(0) == op2)) {
  51.                 String nextEle = exp.get(i+1);
  52.                 String prevEle = st.pop();
  53.                 String ans = operate(Integer.parseInt(prevEle), Integer.parseInt(nextEle), x);
  54.                 st.push(ans);
  55.                 i++;
  56.             } else {
  57.                 st.push(x);
  58.             }
  59.             // System.out.println(x + " " + st);
  60.         }
  61.  
  62.         List<String> ans = new ArrayList<>();
  63.         while(!st.empty()) ans.add(st.pop());
  64.         Collections.reverse(ans);
  65.         return ans;
  66.        
  67.     }
  68.  
  69.     private String operate(int a, int b, String x) {
  70.         if(x.equals("+")) return String.valueOf(a+b);
  71.         if(x.equals("-")) return String.valueOf(a-b);
  72.         if(x.equals("*")) return String.valueOf(a*b);
  73.         if(x.equals("/")) return String.valueOf(a/b);
  74.         return "&";
  75.     }
  76.  
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement