Java balanced expressions check {[()]}

后端 未结 30 1118
傲寒
傲寒 2020-12-04 17:17

I am trying to create a program that takes a string as an argument into its constructor. I need a method that checks whether the string is a balanced parenthesized expressio

30条回答
  •  情话喂你
    2020-12-04 17:42

    Please try this I checked it. It works correctly

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Stack;
    public class CloseBrackets {
        private static Map leftChar = new HashMap<>();
        private static Map rightChar = new HashMap<>();
    
        static {
            leftChar.put('(', '(');
            rightChar.put(')', '(');
            leftChar.put('[', '[');
            rightChar.put(']', '[');
            leftChar.put('{', '{');
            rightChar.put('}', '{');
        }
    
        public static void main(String[] args) throws IOException {
            BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
            String st = bf.readLine();
            System.out.println(isBalanced(st));
        }
    
        public static boolean isBalanced(String str) {
    
            boolean result = false;
            if (str.length() < 2)
                return false;
            Stack stack = new Stack<>();
            /* For Example I gave input 
             * str = "{()[]}" 
             */
    
            for (int i = 0; i < str.length(); i++) {
    
                char ch = str.charAt(i);
                if (!rightChar.containsKey(ch) && !leftChar.containsKey(ch)) {
                    continue;
                }
                // Left bracket only add to stack. Other wise it will goes to else case 
                // For both above input how value added in stack 
                // "{(" after close bracket go to else case
                if (leftChar.containsKey(ch)) {
                    stack.push(ch);
                } else {
                    if (!stack.isEmpty()) {
                        // For both input how it performs
                        // 3rd character is close bracket so it will pop . pop value is "(" and map value for ")" key will "(" . So both are same . 
                        // it will return true. 
                        // now stack will contain only "{" , and travers to next up to end.
                        if (stack.pop() == rightChar.get(ch).charValue() || stack.isEmpty()) {
                            result = true;
                        } else {
                            return false;
                        }
                    } else {
                        return false;
                    }
                }
    
            }
            if (!stack.isEmpty())
                return result = false;
            return result;
        }
    }
    

提交回复
热议问题