Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- private boolean isOperator(char op) {
- if(op == '+' || op == '-' || op == '*' || op == '/') return true;
- return false;
- }
- private boolean isOperator(String op) {
- if(op.length()!=1) return false;
- return isOperator(op.charAt(0));
- }
- private String trim(String s) {
- StringBuilder ans = new StringBuilder();
- for(char x: s.toCharArray()) {
- if(x!=' ') ans.append(x);
- }
- return ans.toString();
- }
- public int calculate(String s) {
- s = trim(s);
- int n = s.length();
- List<String> exp = new ArrayList<>();
- int prev = 0;
- for(int i=0;i<n;i++) {
- if(isOperator(s.charAt(i))) {
- exp.add(s.substring(prev, i));
- exp.add(s.substring(i, i+1));
- prev = i+1;
- }
- }
- exp.add(s.substring(prev));
- // System.out.println(exp);
- exp = eval(exp, '*', '/');
- exp = eval(exp, '+', '-');
- return Integer.parseInt(exp.get(0));
- }
- private List<String> eval(List<String> exp, char op1, char op2) {
- Stack<String> st = new Stack<>();
- int size = exp.size();
- for(int i=0;i<size;i++) {
- String x = exp.get(i);
- if(isOperator(x) && (x.charAt(0) == op1 || x.charAt(0) == op2)) {
- String nextEle = exp.get(i+1);
- String prevEle = st.pop();
- String ans = operate(Integer.parseInt(prevEle), Integer.parseInt(nextEle), x);
- st.push(ans);
- i++;
- } else {
- st.push(x);
- }
- // System.out.println(x + " " + st);
- }
- List<String> ans = new ArrayList<>();
- while(!st.empty()) ans.add(st.pop());
- Collections.reverse(ans);
- return ans;
- }
- private String operate(int a, int b, String x) {
- if(x.equals("+")) return String.valueOf(a+b);
- if(x.equals("-")) return String.valueOf(a-b);
- if(x.equals("*")) return String.valueOf(a*b);
- if(x.equals("/")) return String.valueOf(a/b);
- return "&";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement