判断字符串是不是合法

示例:

1 输入: "(]"
2 输出: false
3 
4 输入: "{[]}"
5 输出: true

 

 

思想:

  这里我们使用栈。

  遍历输入字符串
  如果当前字符为左半边括号时,则将其压入栈中
  如果遇到右半边括号时,分类讨论:
    1)如栈不为空且为对应的左半边括号,则取出栈顶元素,继续循环
    2)若此时栈为空,则直接返回false
    3)若不为对应的左半边括号,反之返回false

 

 

 

 

代码块:

 1 public static boolean isValid(String s) {
 2         Stack<Character> stack = new Stack();
 3         char[] chars = s.toCharArray();
 4         for (char a: chars) {
 5             if (a == '(' || a == '{' || a == '[') {
 6                 stack.add(a);
 7             } else {
 8                 if(stack.isEmpty())
 9                     return false;
10                 if (a == ')' && stack.pop() != '(')
11                     return false;
12                 if (a == '}' && stack.pop() != '{')
13                     return false;
14                 if (a == ']' && stack.pop() != '[')
15                     return false;
16             }
17         }
18         return stack.isEmpty();
19     }
20 
21     public static void main(String[] args) {
22         System.out.println(isValid("[{}]"));
23         System.out.println(isValid("((([{}])))"));
24         System.out.println(isValid("]{}()["));
25         System.out.println(isValid("((([]))}"));
26         System.out.println(isValid("{{[]()[]}"));
27     }

结果:

 

posted on 2020-04-08 23:27  代码吴彦祖  阅读(824)  评论(0编辑  收藏  举报