栈容器的应用
第一题:
用数组来模拟栈:
题解代码:
class Solution {
public:
string removeDuplicates(string s) {
// 用数组模拟栈
string s1;
for (int i = 0; i < s.size(); i++) {
if(s1.size() == 0){
s1+=s[i];
}
else if (s1.back() == s[i]) {
s1.pop_back();
} else
s1 += s[i];
}
return s1;
}
};
第二题:
还是数组模拟栈
题解代码:
class Solution {
public:
bool backspaceCompare(string s, string t) {
//同样的用数组来模拟
string s1,s2;
for(const auto& e:s){
//当不为空并且e == #时才尾删
if(s1.size()&&e == '#'){
s1.pop_back();
}
//不能将#也➕到串中
else if(e != '#') s1+=e;
}
for(const auto& e:t){
if(s2.size()&&e == '#'){
s2.pop_back();
}
else if(e!='#')s2+=e;
}
return s1 == s2;
// if(s1.size() == 0&&s2.size() == 0){
// return true;
// }
// else if(s1.size()!= s2.size()){
// return false;
// }
// else {
// int i = 0;
// while(i<s1.size()){
// if(s1[i] == s2[i]) i++;
// else return false;
// }
// }
// return true;
}
};
第三题:
表达式求值
算法原理:
题解代码:
class Solution {
public:
int calculate(string s) {
//数组模拟
vector<int> st;
char op = '+';
int i =0;
int n = s.size();
while(i<n){
if(s[i] == ' '){
i++;
}
//数字
else if(s[i]>='0'&&s[i]<='9'){
int tem = 0;
while(i<n&&s[i]>='0'&&s[i]<='9'){
tem = tem*10+(s[i++]-'0');
}
//此时的i指向的是非数字的元素
if(op == '+') st.push_back(tem);
if(op == '-') st.push_back(-tem);
if(op == '*') st.back() *= tem;
if(op == '/') st.back() /= tem;
}
else {
op = s[i];
i++;
}
}
int ret = 0;
for(auto& e:st){
ret+=e;
}
return ret;
}
};