关于LeetCode中Valid Parentheses一题的理解

题目如下:

Given a string containing just the characters '('')''{''}''[' and ']', determine if the input string is valid.

The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]" are not.

    这道题也是想了很久,今天走路的时候突然想到可以用压栈弹栈的方式来实现,就马上去LeetCode把它撸完了,下面是已Accepted的代码:

    public boolean isValid(String s) {
        Stack stack = new Stack();
        for(int i=0;i
    题目的解题思路如下:

(1)如果发现是输入'{','[','('是这三种之中的一种,就直接把它们压入栈中;

(2)如果输入为'}',']',')'就需要获取栈顶的元素,如果能和这三种匹配上就直接把它探出,即如果输入为‘}’就查看栈顶元素,如果是'{'就将'{'弹出,否则返回false;

(3)如果循环结束后,栈中还存在元素,就说明有未匹配的项,应当返回false,反之则返回true。

    然后是评论区的回答,下面这个方法也是使用了“栈”,但是快一些,思路是一样的,代码如下:

	public boolean isValid(String s) {
		char[] stack = new char[s.length()];
		int head = 0;
		for(char c : s.toCharArray()) {
			switch(c) {
				case '{':
				case '[':
				case '(':
					stack[head++] = c;
					break;
				case '}':
					if(head == 0 || stack[--head] != '{') return false;
					break;
				case ')':
					if(head == 0 || stack[--head] != '(') return false;
					break;
				case ']':
					if(head == 0 || stack[--head] != '[') return false;
					break;
			}
		}
		return head == 0;
	}
    依然来自评论区,思路一样,但是更精辟些,代码如下:

public boolean isValid(String s) {
	Stack stack = new Stack();
	for (char c : s.toCharArray()) {
		if (c == '(')
			stack.push(')');
		else if (c == '{')
			stack.push('}');
		else if (c == '[')
			stack.push(']');
		else if (stack.isEmpty() || stack.pop() != c)
			return false;
	}
	return stack.isEmpty();
}
    大致就是这样。



你可能感兴趣的:(java)