LeetCode 20. 有效的括号(java)

题目:

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

示例:
LeetCode 20. 有效的括号(java)_第1张图片
代码:

  • 解法一
class Solution {
   public boolean isValid(String s) {
   //使用栈实现
		Stack stack = new Stack();
		//遍历字符串中的每个字符
		for (int i = 0; i < s.length(); i++) {
		//如果为空 直接将字符进栈
			if (stack.isEmpty()) {
				stack.push(s.charAt(i));
			} else {	
				if (stack.peek() - s.charAt(i) == -1 || stack.peek() - s.charAt(i) == -2) {  //如果两个相匹配 弹栈()差1 {} []差2
					stack.pop();
				} else {	//如果两个不匹配 进栈
					stack.push(s.charAt(i));
				}
			}
		}
		if (stack.isEmpty()) {	//判断栈是否为空 (如果全部匹配栈为空)
			return true;
		} else {
			return false;
		}
	}
}

  • 解法二
class Solution {
    public boolean isValid(String s) {
        Stack stack = new Stack<>();
        //foreach遍历 
        for (char c : s.toCharArray()) {
            if (c=='(' || c=='[' || c=='{') {	//如果为( { [则进栈
                stack.push(c);
            } else {
                if (stack.empty()) return false;	//栈为空 所以返回false
                if (c==')' && stack.pop()!='(') return false;	//有) 但没有左边的相匹配 所以返回false
                if (c==']' && stack.pop()!='[') return false;	//有]但没有左边的相匹配 所以返回false
                if (c=='}' && stack.pop()!='{') return false;	//有}但没有左边的相匹配 所以返回false
            }
        }
        return stack.empty();	//根据else中栈是否为空的情况返回 true/false
    }
}
  • 别人的代码
class Solution {
    public boolean isValid(String s) {
        boolean result = false;
        String[] stack = new String[s.length()];
        int r = 0;
        if(s.length() == 0) return true;
        for (int i = 0; i 

你可能感兴趣的:(LeetCode刷题)