Day11 栈和队列
class Solution {
public:
stack<char> st;
bool isValid(string s) {
if(s.size()%2!=0) return false;
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()||st.top()!=s[i]) return false;
else st.pop();
}
return st.empty();
}
};
思路想不到。这种栈的用法可以用来比较具有成对的特征的东西。
1047. 删除字符串中的所有相邻重复项
class Solution {
public:
string removeDuplicates(string s) {
string result;
for(char a:s){
if(result.empty()||a!=result.back())
result.push_back(a);
else result.pop_back();
}
return result;
}
};
有栈的思路,但是也可以灵活使用string
的特性来达到目的。
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]));
}
int result = st.top();
st.pop();
return result;
}
};
stoll
强制转换会long long int
类型,另外注意''
与""
的区分,分别是字符和字符串的区别。