题目描述
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号。
解法一:stack
这道题目是典型的堆栈数据结构的应用,虽然思路很清晰,代码也很简单,但是要注意逻辑的严谨性。尤其是在判断 栈顶元素是否匹配之前,要先判断栈是否为空。
1class Solution {
2public:
3 bool isValid(const std::string& s) {
4 std::stack<char> st;
5 for (int i = 0; i < s.length(); ++i) {
6 char c = s[i];
7 if (c == '(' || c == '{' || c == '[') {
8 st.push(c);
9 } else {
10 if (st.empty()) return false;
11 if (c == ')' && st.top() != '(') return false;
12 if (c == '}' && st.top() != '{') return false;
13 if (c == ']' && st.top() != '[') return false;
14 st.pop();
15 }
16 }
17 return st.empty();
18 }
19};
评论