第五章 栈与队列part02
今日内容:
- 20. 有效的括号
- 1047. 删除字符串中的所有相邻重复项
- 150. 逆波兰表达式求值
详细布置
20. 有效的括号
栈的应用 括号匹配
class Solution {
public:
bool isValid(string s) {
if(s.size() % 2 != 0){
return false;
}
stack<char> st;
for(int i = 0; i < s.size(); i++){
if(s[i] == '('){
st.push(')');
}else if(s[i] == '{'){
st.push('}');
}else if(s[i] == '['){
st.push(']');
}else if(st.empty()==true || st.top()!=s[i]){
return false;
}else{
st.pop();
}
}
return st.empty();
}
};
题目链接/文章讲解/视频讲解:代码随想录
1047. 删除字符串中的所有相邻重复项
注意result字符串添加的语法格式
class Solution {
public:
string removeDuplicates(string s) {
stack<int> st;
for(char a:s){
if(st.empty() || a!=st.top()){
st.push(a);
}else{
st.pop();
}
}
string result="";
while(!st.empty()){
result += st.top();
st.pop();
}
reverse(result.begin(),result.end());
return result;
}
};
栈的经典应用。
要知道栈为什么适合做这种类似于爱消除的操作,因为栈帮助我们记录了 遍历数组当前元素时候,前一个元素是什么。
题目链接/文章讲解/视频讲解:代码随想录
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);
}else if(tokens[i] == "-"){
st.push(num2-num1);
}else if(tokens[i] == "*"){
st.push(num2*num1);
}else if(tokens[i] == "/"){
st.push(num2/num1);
}
}else{
st.push(stoll(tokens[i]));
}
}
return st.top();
}
};
题目链接/文章讲解/视频讲解:代码随想录