代码随想录算法打卡第十天, 新手自我记录一下刷题历程, 仅为自我打卡使用.
今天的题比较简单, 都是差不多的思路, 像卡哥说的那样, 对对碰消消乐的感觉
第三题纯自己想可能想不到,但是官方题目下面给了用栈的小提示,
写的时候有一点没注意到的是可能会出现负数, 所以用string的第一位判断这个string表示的是不是一个数 这样的逻辑是有缺陷的
判断逻辑略冗余, 像卡哥答案那样, 如果看到左括号就推对应的右括号入栈能减轻很多判断量
class Solution {
public:
bool isValid(string s) {
stack<char> st;
if (s.size() % 2 != 0) return false;
for (char c: s){
if ( c == '(' || c == '[' || c == '{'){
st.push(c);
}
else if (st.empty()){
return false;
}
else if (c == ')'){
char top = st.top();
st.pop();
if (top != '(')
return false;
}
else if (c == ']') {
char top = st.top();
st.pop();
if (top != '[')
return false;
}
else if (c == '}') {
char top = st.top();
st.pop();
if (top != '{')
return false;
}
else
return false;
}
return st.empty();
}
};
消消乐他来了!
用string自己当栈会更简洁!
class Solution {
public:
string removeDuplicates(string s) {
stack<char> st;
for (char c: s){
if (st.empty() || c != st.top()){
st.push(c);
}
else{
st.pop();
}
}
string result;
while (!st.empty()){
result = st.top() + result;
st.pop();
}
return result;
}
};
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<int> st;
for (int i = 0; i < tokens.size(); i++){
if (tokens[i] == "+"){
int t2 = st.top();
st.pop();
int t1 = st.top();
st.pop();
st.push(t1 + t2);
}
else if (tokens[i] == "-"){
int t2 = st.top();
st.pop();
int t1 = st.top();
st.pop();
st.push(t1 - t2);
}
else if (tokens[i] == "/"){
int t2 = st.top();
st.pop();
int t1 = st.top();
st.pop();
st.push(t1 / t2);
}
else if (tokens[i] == "*"){
int t2 = st.top();
st.pop();
int t1 = st.top();
st.pop();
st.push(t1 * t2);
}
else {
st.push(stoi(tokens[i]));
}
}
int result = st.top();
st.pop();
return result;
}
};
快追上生病那几天被大家落下的进度了! 加油!