给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 注意空字符串可被认为是有效字符串
输入: "([)]"
输出: false
方法一:栈+暴力判断
第一版代码…
class Solution {
public:
bool isValid(string s) {
stack<char> st;
for (char c : s) {
if (c == '(') {
st.push(c);
} else if (c == ')') {
if (st.empty() || st.top() != '(')
return false;
st.pop();
} else if (c == '[') {
st.push(c);
} else if (c == ']') {
if (st.empty() || st.top() != '[')
return false;
st.pop();
} else if (c == '{') {
st.push(c);
} else if (c == '}') {
if (st.empty() || st.top() != '{')
return false;
st.pop();
}
}
return st.empty();
}
};
预处理映射…
class Solution {
public:
bool isValid(string s) {
if (s.size()&1) return false;
stack<char> st;
unordered_map<char, char> map;
map[')']='(', map[']']='[', map['}']='{';
for (char c : s) {
if (map.find(c) != map.end()) {
if (st.empty() || st.top() != map[c])
return false;
st.pop();
} else {
st.push(c);
}
}
return st.empty();
}
};
复杂度分析
- Time: O ( n ) O(n) O(n),
- Space: O ( n ) O(n) O(n)