LeetCode 刷题记录 20. Valid Parentheses

题目:
Given a string containing just the characters ‘(’, ‘)’, ‘{’, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.

An input string is valid if:

Open brackets must be closed by the same type of brackets.
Open brackets must be closed in the correct order.
Note that an empty string is also considered valid.

Example 1:

Input: “()”
Output: true
Example 2:

Input: “()[]{}”
Output: true
Example 3:

Input: “(]”
Output: false
Example 4:

Input: “([)]”
Output: false
Example 5:

Input: “{[]}”
Output: true
解法:
利用栈,遍历字符串,如果是左括号就入栈,否则先查看栈是否为空,为空返回false,如果是右括号,就查看栈顶元素,如果不是相匹配的左括号,返回false,否则左括号出栈,遍历完成,检查栈,栈为空,返回true,否则返回false
c++:

class Solution {
public:
    bool isValid(string s) {
        
        stack<char> sk;
        for(int i = 0; i < s.size(); i++){
            if(s[i] == '(' || s[i] == '[' || s[i] == '{'){
                sk.push(s[i]);
            } else {
                if(sk.empty()) return false;
    
                char temp = sk.top();
                if(s[i] == ')' && temp != '(') return false;
                if(s[i] == ']' && temp != '[') return false;
                if(s[i] == '}' && temp != '{') return false;
                    
                sk.pop();
                
                
            }
           
        }
       return sk.empty();
    }
};

java:

  1. Stack首字母大写
  2. 查看栈顶元素是peek()函数
class Solution {
    public boolean isValid(String s) {
        Stack<Character> sk = new Stack<>();
        for(int i = 0; i < s.length(); i++){
            if(s.charAt(i) == '(' || s.charAt(i) == '[' || s.charAt(i) == '{'){
                sk.push(s.charAt(i));
            } else {
                if(sk.empty()) return false;
    
                char temp = sk.peek();
                if(s.charAt(i) == ')' && temp != '(') return false;
                if(s.charAt(i) == ']' && temp != '[') return false;
                if(s.charAt(i) == '}' && temp != '{') return false;
                    
                sk.pop();
                
                
            }
           
        }
       return sk.empty();
    }
}

Python:
Python中没有栈结构,可以用list实现栈,list.pop([i]) 从列表的指定位置移除元素,并将其返回。如果没有指定索引,a.pop()返回最后一个元素。元素随即从列表中被移除。方法中 i 两边的方括号表示这个参数是可选的

class Solution(object):
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        stack = []
        dict = {"]":"[", "}":"{", ")":"("}
        for i in s:
            if i in dict.values():
                stack.append(i)
            else:
                if not stack or dict[i] != stack[-1]: return False
                stack.pop()
        return not stack
                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值