LeetCode-Stack-20-E:有效的括号


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

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

思路

解法1-栈

执行用时 :3 ms, 在所有 Java 提交中击败了59.96%的用户
内存消耗 :34.3 MB, 在所有 Java 提交中击败了50.94%的用户

class Solution {
    public boolean isValid(String s) {
        if (s.isEmpty()){
            return true;
        }

        char[] arr = s.toCharArray();
        Stack<Character> stack =new Stack<>();

        for(int i=0; i<arr.length; i++){
            if(stack.isEmpty()){
                stack.push(arr[i]);
            }else if (judge(stack.peek(), arr[i])){
                stack.pop();
            }else{
                stack.push(arr[i]);
            }
        }

        return stack.isEmpty();
    }

    boolean judge(char a, char b){
        return (a=='(' && b==')') || (a=='[' && b==']') || (a=='{' && b=='}');
    } 
}

解法2-same 9 years education, why are u outstanding ?

https://leetcode.com/problems/valid-parentheses/discuss/9178/Short-java-solution


执行用时 :2 ms, 在所有 Java 提交中击败了93.84%的用户
内存消耗 :34.1 MB, 在所有 Java 提交中击败了75.38%的用户

	public boolean isValid(String s) {
		Stack<Character> stack = new Stack<Character>();
		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();
	}

解法3-思路清奇

(1)效率较低。另外注意String字符串的final特性,得加上s = s.replace("()", "");

执行用时 :105 ms, 在所有 Java 提交中击败了5.01%的用户
内存消耗 :37.5 MB, 在所有 Java 提交中击败了5.00%的用户

class Solution {
  public boolean isValid(String s) {

        while (s.contains("()") || s.contains("[]") || s.contains("{}")){

            s = s.replace("()", "");
            s = s.replace("[]","");
            s = s.replace("{}","");
        }
        return s.equals("");
    }
}
发布了71 篇原创文章 · 获赞 16 · 访问量 1677

猜你喜欢

转载自blog.csdn.net/Xjheroin/article/details/104072552
今日推荐