LeetCode20. 有效的括号
代码:
class Solution {
public:
bool isValid(string s) {
stack<char> st;
std::unordered_map<char,char> k;
k[')'] = '(';
k['}'] = '{';
k[']'] = '[';
st.push(s[0]);
for(int i=1;i<s.size();i++){
if(!st.empty()){
if(k[s[i]]==st.top()){
st.pop();
}else{
st.push(s[i]);
}
}else{
st.push(s[i]);
}
}
if(st.empty())
return true;
else
return false;
}
};
LeetCode1047. 删除字符串中的所有相邻重复项
代码:
class Solution {
public:
string removeDuplicates(string s) {
stack<char> st;
for(int i=0;i<s.size();i++){
if(st.empty()){
st.push(s[i]);
}else{
if(st.top()==s[i]){
st.pop();
}else{
st.push(s[i]);
}
}
}
string result="";
while(!st.empty()){
result+=st.top();
st.pop();
}
reverse(result.begin(),result.end());
return result;
}
};
LeetCode150. 逆波兰表达式求值
代码:
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<long long int> st;
for(int i=0;i<tokens.size();i++){
if(tokens[i]=="+"||tokens[i]=="*"||tokens[i]=="/"||tokens[i]=="-"){
long long int s1=st.top();
st.pop();
long long int s2 =st.top();
st.pop();
if(tokens[i]=="+")
st.push(s1+s2);
else if(tokens[i]=="-")
st.push(s2-s1);
else if(tokens[i]=="*")
st.push(s1*s2);
else if(tokens[i]=="/")
st.push(s2/s1);
}else{
st.push(stoll(tokens[i]));
}
}
return st.top();
}
};