最近换实习很久不刷leetcode。。真的有点手生了,还是要坚持刷阿!
有效的括号这道题就是实现了一个相互匹配,那么基本上就是用字典,那么如何灵活的用字典,可以使用括号对应数字取加和判断,也可以就单独压入右括号的方法。
class Solution:def isValid(self, s: str) -> bool:dic = {'{':'}','(':')','[':']'}stack = []for c in s:if c in dic:stack.append(dic[c])elif not stack or stack.pop()!= c:return Falsereturn len(stack) == 0
一开始觉得数字的简单,但是后面耐心了解了一下右括号的发现更简单!
数字加和C++版:
class Solution {
public:bool isValid(string s) {unordered_map<char, int> myMap = {{'(', 1},{'{', 2},{'[', 3},{']', 4},{'}', 5},{')', 6}};stack<char> mySk;for(auto element:s){if(myMap[element] < 4){mySk.push(element); }else{if(mySk.empty() || myMap[element] + myMap[mySk.top()] != 7){return false;}else{mySk.pop();}}}return mySk.empty();}
};
当然也可以不用字典或者map,因为毕竟元素比较少,直接手敲也可以。
public boolean isValid(String s) {if(s.isEmpty())return true;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.empty()||c!=stack.pop())return false;}if(stack.empty())return true;return false;}