第十一天|20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值

20. 有效的括号

题目链接:20. 有效的括号 - 力扣(LeetCode)

class Solution {
public:
//三种情况:1、左右不匹配;2、右边完了左边没完;3、右边发现左边没有匹配的了
    bool isValid(string s) {
        stack St;
        for (char c : s) {
            if (c == '(') St.push(')');
            else if (c == '{') St.push('}');
            else if (c == '[') St.push(']');

            else if (St.empty() || c != St.top()) return false;
            else if (c == St.top()) St.pop();
        }
        return St.empty();
    }
};

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

题目链接:1047. 删除字符串中的所有相邻重复项 - 力扣(LeetCode)

class Solution {
public:
    string removeDuplicates(string s) {
        stack St;
        string result;
        for (char c : s) {
            if (!St.empty() && c == St.top()) St.pop();
            else St.push(c);
        }
        while (!St.empty()) {
            result.push_back(St.top());
            St.pop();
        }
        reverse(result.begin(), result.end());
        return result;
    }
};

150. 逆波兰表达式求值

题目链接:150. 逆波兰表达式求值 - 力扣(LeetCode)

class Solution {
public:
    int evalRPN(vector& tokens) {
        stack St;
        for (string s : tokens) {
            if (s == "+" || s == "-" || s == "*" || s == "/") {
                long long num1 = St.top();
                St.pop();
                long long num2 = St.top();
                St.pop();
                if (s == "+") St.push(num2 + num1);
                if (s == "-") St.push(num2 - num1);
                if (s == "*") St.push(num1 * num2);
                if (s == "/") St.push(num2 / num1);
            } else St.push(stoll(s));
            
        }
        int result = St.top();
        St.pop();
        return result;
    }
};

你可能感兴趣的:(算法,数据结构,算法)