题目要求是这样,给你一串只包含符号的字符串,看看这串符号合不合法。怎么算合法呢?"()()()"和"[{}]()"都算是合法,但"([)]"就不合法了。
思路很简单,通过上面举的例子,我们可以看出来,一个右括号的出现,其合不合法,取决于最后出现的的左括号能不能对应起来,如果不能对应(如"("和"]"),则返回false。而最后出现的左括号,最优先要被判断,所以只是一个典型的后进先出的例子,这样我们就很容易想到一个后进先出的数据结构——栈。
代码如下:
1 public class Solution { 2 public boolean isValid(String s) { 3 Stack<Character> stack = new Stack<Character>(); 4 for (int i = 0; i < s.length(); i++) { 5 char c = s.charAt(i); 6 if (c == '(' || c == '[' || c == '{') { 7 stack.push(c); 8 } 9 else { 10 //注意判断stack是否为空。 11 if (stack.isEmpty()) return false; 12 char c1 = getAccording(c); 13 if (c1 != stack.pop()) return false; 14 } 15 } 16 //如果stack不为空,说明还有左括号留下来。 17 return stack.isEmpty(); 18 } 19 20 private char getAccording(char c) { 21 char c1 = ' '; 22 switch (c) { 23 case ')': c1 = '('; break; 24 case ']': c1 = '['; break; 25 case '}': c1 = '{'; break; 26 } 27 return c1; 28 } 29 }