Parenthesis/Brackets Matching using Stack algorithm

前端 未结 30 2561
你的背包
你的背包 2020-11-27 11:39

For example if the parenthesis/brackets is matching in the following:

({})
(()){}()
()

and so on but if the parenthesis/brackets is not mat

相关标签:
30条回答
  • 2020-11-27 12:08

    Here's a solution in Python.

    #!/usr/bin/env python
    
    def brackets_match(brackets):
        stack = []
        for char in brackets:
            if char == "{" or char == "(" or char == "[":
                stack.append(char)
            if char == "}":
                if stack[-1] == "{":
                    stack.pop()
                else:
                    return False
            elif char == "]":
                if stack[-1] == "[":
                    stack.pop()
                else:
                    return False
            elif char == ")":
                if stack[-1] == "(":
                    stack.pop()
                else:
                    return False
        if len(stack) == 0:
            return True
        else:
            return False
    
    if __name__ == "__main__":
        print(brackets_match("This is testing {([])} if brackets have match."))
    
    0 讨论(0)
  • 2020-11-27 12:09
    public static boolean isBalanced(String s) {
        Map<Character, Character> openClosePair = new HashMap<Character, Character>();
        openClosePair.put('(', ')');
        openClosePair.put('{', '}');
        openClosePair.put('[', ']'); 
    
        Stack<Character> stack = new Stack<Character>();
        for (int i = 0; i < s.length(); i++) {
    
            if (openClosePair.containsKey(s.charAt(i))) {
                stack.push(s.charAt(i));
    
            } else if ( openClosePair.containsValue(s.charAt(i))) {
                if (stack.isEmpty())
                    return false;
                if (openClosePair.get(stack.pop()) != s.charAt(i))
                    return false;
            }
    
            // ignore all other characters
    
        }
        return stack.isEmpty();
    }
    
    0 讨论(0)
  • 2020-11-27 12:10

    I have seen answers here and almost all did well. However, I have written my own version that utilizes a Dictionary for managing the bracket pairs and a stack to monitor the order of detected braces. I have also written a blog post for this.

    Here is my class

    public class FormulaValidator
    {
        // Question: Check if a string is balanced. Every opening bracket is matched by a closing bracket in a correct position.
        // { [ ( } ] )
    
        // Example: "()" is balanced
        // Example: "{ ]" is not balanced.
        // Examples: "()[]{}" is balanced.
        // "{([])}" is balanced
        // "{ ( [ ) ] }" is _not_ balanced
    
        // Input: string, containing the bracket symbols only
        // Output: true or false
        public bool IsBalanced(string input)
        {
            var brackets = BuildBracketMap();
            var openingBraces = new Stack<char>();
            var inputCharacters = input.ToCharArray();
    
            foreach (char character in inputCharacters)
            {
                if (brackets.ContainsKey(character))
                {
                    openingBraces.Push(character);
                }
    
                if (brackets.ContainsValue(character))
                {
                    var closingBracket = character;
                    var openingBracket = brackets.FirstOrDefault(x => x.Value == closingBracket).Key;
    
                    if (openingBraces.Peek() == openingBracket)
                        openingBraces.Pop();
                    else
                        return false;
                }
            }
    
            return openingBraces.Count == 0;
        }
    
        private Dictionary<char, char> BuildBracketMap()
        {
            return new Dictionary<char, char>()
            {
                {'[', ']'},
                {'(', ')'},
                {'{', '}'}
            };
        }
    }
    
    0 讨论(0)
  • 2020-11-27 12:11
    import java.util.Stack;
    
    class Demo
    {
    
        char c;
    
        public  boolean checkParan(String word)
        {
            Stack<Character> sta = new Stack<Character>();
            for(int i=0;i<word.length();i++)
            {
               c=word.charAt(i);
    
    
              if(c=='(')
              {
                  sta.push(c);
                  System.out.println("( Pushed into the stack");
    
              }
              else if(c=='{')
              {
                  sta.push(c);
                  System.out.println("( Pushed into the stack");
              }
              else if(c==')')
              {
                  if(sta.empty())
                  {
                      System.out.println("Stack is Empty");
                      return false;
                  }
                  else if(sta.peek()=='(')
                  {
    
                      sta.pop();
                      System.out.println(" ) is poped from the Stack");
                  }
                  else if(sta.peek()=='(' && sta.empty())
                  {
                      System.out.println("Stack is Empty");
                      return false;
                  }
              }
              else if(c=='}')
              {
                  if(sta.empty())
                  {
                   System.out.println("Stack is Empty");
                  return false;
                  }
                  else if(sta.peek()=='{')
                  {
                      sta.pop();
                      System.out.println(" } is poped from the Stack");
                  }
    
              }
    
              else if(c=='(')
              {
                  if(sta.empty())
                  {
                     System.out.println("Stack is empty only ( parenthesis in Stack ");  
                  }
              }
    
    
            }
        // System.out.print("The top element is : "+sta.peek());
        return sta.empty();
        } 
    
    
    
    
    
    }
    

    public class ParaenthesisChehck {
    
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            // TODO code application logic here
           Demo d1= new Demo();
         //  d1.checkParan(" ");
          // d1.checkParan("{}");
           //d1.checkParan("()");
           //d1.checkParan("{()}");
         // d1.checkParan("{123}");
           d1.checkParan("{{{}}");
    
    
    
    
    
        }
    
    }
    
    0 讨论(0)
  • 2020-11-27 12:12

    Brackets Matching program without using stack

    Here i used string for replacement of stack implementations like push and pop operations.

    `package java_prac; import java.util.*; public class BracketsChecker {

        public static void main(String[] args) {
            System.out.println("- - - Brackets Checker [ without stack ] - - -\n\n");
            Scanner scan=new Scanner(System.in);
            System.out.print("Input : " );
            String s = scan.nextLine();
            scan.close();
            System.out.println("\n...working...\n");
            String o="([{";
            String c=")]}";
            String x=" ";
            int check =0;
            for (int i = 0; i < s.length(); i++) {
                if(o.contains(String.valueOf(s.charAt(i)))){
                    x+=s.charAt(i);     
                     //System.out.println("In : "+x); // stack in
                }else if(c.contains(String.valueOf(s.charAt(i)))) { 
                    char temp = s.charAt(i);
                    if(temp==')') temp = '(';
                    if(temp=='}') temp = '{';
                    if(temp==']') temp = '[';
                    if(x.charAt(x.length()-1)==temp) {
                        x=" "+x.substring(1,x.length()-1);
                        //System.out.println("Out : "+x);   // stack out
                }else {
                check=1;    
                }
                }
        }   
            if(x.length()==1 && check==0 ) {
                System.out.println("\n\nCompilation Success \n\n© github.com/sharanstark 2k19");
            }else {
                System.out.println("\n\nCompilation Error \n\n© github.com/sharanstark 2k19" );
            }
        }
    }`
    
    0 讨论(0)
  • 2020-11-27 12:15

    Was asked to implement this algorithm at live coding interview, here's my refactored solution in C#:

    Git Tests

    0 讨论(0)
提交回复
热议问题