题目:
代码(首刷自解 2024年1月21日):
class Solution {
bool check(char ch1,char ch2) {
if(ch1 == ')' && ch2 != '(') return true;
else if(ch1 == ']' && ch2 != '[') return true;
else if(ch1 == '}' && ch2 != '{') return true;
else return false;
}
public:
bool isValid(string s) {
if (s.size() < 2) return false;
stack<char> stk;
for (int i = 0; i < s.size(); ++i) {
if (stk.empty()) {
if(s[i] == ')' || s[i] == '}' || s[i] == ']') return false;
else stk.push(s[i]);
}else{
if(s[i] == '(' || s[i] == '{' || s[i] == '[') stk.push(s[i]);
else{
if(check(s[i],stk.top())) return false;
else{
stk.pop();
continue;
}
}
}
}
return stk.empty() ? true : false;
}
};
时间复杂度高
代码(二刷看解析 2024年1月21日):
class Solution {
public:
bool isValid(string s) {
int n = s.size();
if (n % 2 != 0) return false;
stack<char> stk;
for (int i = 0; i < n; ++i) {
if (s[i] == '(') stk.push(')');
else if (s[i] == '[') stk.push(']');
else if (s[i] == '{') stk.push('}');
else if (stk.empty() || s[i] != stk.top()) return false;
else stk.pop();
}
return stk.empty();
}
};
代码(三刷自解 2024年3月8日)
class Solution {
public:
bool isValid(string s) {
stack<char> st;
for (int i = 0; i < s.size(); ++i) {
if (s[i] == '(' || s[i] == '[' || s[i] == '{') {
st.push(s[i]);
} else {
if (st.empty()) {
return false;
}
if ((s[i] == ')' && st.top() == '(') ||
(s[i] == ']' && st.top() == '[') ||
(s[i] == '}' && st.top() == '{')) {
st.pop();
} else {
return false;
}
}
}
return st.empty();
}
};
代码(四刷自解 2024年3月28日)
class Solution {
public:
bool isValid(string s) {
// 栈
stack<char> st;
// 遍历 c : s
for (auto& c : s) {
// 左括号入栈
if (c == '(' || c == '[' || c == '{') st.push(c);
// 右括号和栈顶比较,若匹配栈顶出栈,不匹配return false;
else {
if (st.empty()) return false;
if (c == ')' && st.top() != '(') return false;
if (c == ']' && st.top() != '[') return false;
if (c == '}' && st.top() != '{') return false;
st.pop();
}
}
// 根据最终栈中是否有元素返回true/false
return st.empty();
}
};
代码(五刷自解 2024年5月4日)
class Solution {
public:
bool isValid(string s) {
// 栈,保存左括号,遇到匹配的右括号出栈
stack<char> stk;
for (char ch : s) {
if (ch == '{' || ch == '[' || ch == '(') {
stk.push(ch);
} else if (stk.empty()) {
return false;
} else if (ch == '}' && stk.top() == '{') {
stk.pop();
} else if (ch == ']' && stk.top() == '[') {
stk.pop();
} else if (ch == ')' && stk.top() == '(') {
stk.pop();
} else {
return false;
}
}
return stk.empty();
}
};