问题描述
给定一个字符串,只包含{、}、[、]、(、)。要求判断这个字符串是否是符合括号的原则的。题目链接:**点我**
样例输入输出
输入:{[]}
输出:true
输入:{[}]
输出:false
问题解法
使用栈存储左括号,遍历字符串,每次遇到左括号时压入栈,遇到右括号时,查看栈顶的左括号是否与这个右括号对应,如果对应,则将栈顶元素出栈,否则说明字符串不合法。当字符串遍历结束时,如果栈中元素为空,说明字符串合法,否则字符串不合法。代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
   | class Solution  {     public boolean isValid(String s)      {         if (s == null)         {             return true;         }                  Stack<Character> stack = new Stack<>();         int length = s.length();         for (int i = 0; i < length; i++)         {             char ch = s.charAt(i);             if (ch == '[' || ch == '(' || ch == '{')             {                 stack.push(Character.valueOf(ch));                 continue;             }                          if (stack.isEmpty())             {                 return false;             }                          char topCh = stack.pop();             if (ch == ']' && topCh == '[')             {                 continue;             }                          if (ch == ')' && topCh == '(')             {                 continue;             }                          if (ch == '}' && topCh == '{')             {                 continue;             }                          return false;         }                  return stack.isEmpty();     } }
   |