代码随想录算法训练营day11

文章目录

  • 一、20. 有效的括号
    • 1.题目
    • 2.解题思路
  • 二、1047. 删除字符串中的所有相邻重复项
    • 1.题目
    • 2.解题思路
  • 三、150. 逆波兰表达式求值
    • 1.题目
    • 2.解题思路
  • 总结


一、20. 有效的括号

1.题目

代码随想录算法训练营day11_第1张图片
代码随想录算法训练营day11_第2张图片

2.解题思路

class Solution {
public:
    bool isValid(string s) {
         if (s.size() % 2 != 0) return false; // s的长度为奇数
        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() || st.top() != s[i]) return false;
            else st.pop(); // st.top() 与 s[i]相等,栈弹出元素
        }
        // 已经遍历完所有元素
        return st.empty();
    }
    
};

二、1047. 删除字符串中的所有相邻重复项

1.题目

代码随想录算法训练营day11_第3张图片

2.解题思路

class Solution {
public:
    string removeDuplicates(string s) {
          string result;
        for(char S: s) {
            if(result.empty() || result.back() !=S) {
                result.push_back(S);
            }
            else {
                result.pop_back();
            }
        }
        return result;
    }
    
};

三、150. 逆波兰表达式求值

1.题目

代码随想录算法训练营day11_第4张图片

2.解题思路

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 {
                //stoll此函数将在函数调用中作为参数提供的字符串转换为long long int。它解析str并将其内容解释为指定基数的整数,并将其作为long long int类型的值返回。
                st.push(stoll(tokens[i]));
            }
        }

        int result = st.top();
        st.pop(); 
        return result;
    }
};

总结

补博客

你可能感兴趣的:(代码随想录,算法,c++,数据结构)