20. 有效的括号
题目链接/文章讲解/视频讲解:代码随想录
代码
class Solution {
public:
bool isValid(string s) {
stack<char> check;
for(int i = 0 ; i < s.length(); i++){
if(s[i] == '(' || s[i] == '[' || s[i] == '{'){
check.push(s[i]);
continue;
}
if(s[i] == ')'){
if(!check.empty() && check.top() == '('){
check.pop();
continue;
}
else{
return false;
}
}
if(s[i] == ']'){
if(!check.empty() && check.top() == '['){
check.pop();
continue;
}
else{
return false;
}
}
if(s[i] == '}'){
if(!check.empty() && check.top() == '{'){
check.pop();
continue;
}
else{
return false;
}
}
}
if(check.empty()) return true;
else return false;
}
};
1047. 删除字符串中的所有相邻重复项
题目链接/文章讲解/视频讲解:代码随想录
第一次写用了erase方法进行删除,感觉有点慢
class Solution {
public:
string removeDuplicates(string s) {
stack<char> check;
int i = 0;
while(i < s.size()){
if(check.empty() || check.top() != s[i]){
check.push(s[i]);
i++;
}
else if(!check.empty()){
check.pop();
s.erase(s.begin() + i - 1 , s.begin() + i + 1);
i--;
}
}
return s;
}
};
优化后,只需要翻转栈内的字符串即可
class Solution {
public:
string removeDuplicates(string s) {
stack<char> check;
string ans = "";
int i = 0;
while(i < s.size()){
if(check.empty() || check.top() != s[i]){
check.push(s[i]);
}
else if(!check.empty()){
check.pop();
}
i++;
}
while(!check.empty()){
ans.append(1,check.top());
check.pop();
}
reverse(ans.begin(),ans.end());
return ans;
}
};
150. 逆波兰表达式求值
题目链接/文章讲解/视频讲解:代码随想录
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<long long> st;
for (int i = 0; i < tokens.size(); i++) {
if (tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/") {
long long num1 = st.top();
st.pop();
long long num2 = st.top();
st.pop();
if (tokens[i] == "+") st.push(num2 + num1);
if (tokens[i] == "-") st.push(num2 - num1);
if (tokens[i] == "*") st.push(num2 * num1);
if (tokens[i] == "/") st.push(num2 / num1);
} else {
st.push(stoll(tokens[i]));
}
}
return st.top();
}
};