方法:栈
class Solution {
public:
bool isValid(string s) {
stack<int> stk;
for (char c : s) {
if (c == '(') stk.push(')');
else if (c == '[') stk.push(']');
else if (c == '{') stk.push('}');
else if (stk.empty() || stk.top() != c) return false;
else stk.pop();
}
return stk.empty();
}
};
$时间复杂度O(n),空间复杂度O(n)
方法:栈
class Solution {
public:
string removeDuplicates(string s) {
stack<char> stk;
for (char c : s) {
if (stk.empty() || c != stk.top()) stk.push(c);
else stk.pop();
}
string res;
while (!stk.empty()) {
res += stk.top();
stk.pop();
}
reverse(res.begin(), res.end());
return res;
}
};
$时间复杂度O(nlogn),空间复杂度O(n)
方法:栈
class Solution {
typedef long long ll;
public:
int evalRPN(vector<string>& tokens) {
stack<ll> stk;
for (int i = 0; i < tokens.size(); ++i) {
if (tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/") {
ll nums1 = stk.top(); stk.pop();
ll nums2 = stk.top(); stk.pop();
if (tokens[i] == "+") stk.push(nums2 + nums1);
if (tokens[i] == "-") stk.push(nums2 - nums1);
if (tokens[i] == "*") stk.push(nums2 * nums1);
if (tokens[i] == "/") stk.push(nums2 / nums1);
} else stk.push(stoll(tokens[i]));
}
ll res = stk.top();
return res;
}
};
$时间复杂度O(n),空间复杂度O(n)
文章介绍了使用栈数据结构解决三个问题:检查括号的有效性,删除字符串中的所有相邻重复项,以及求解逆波兰表达式的值。每个问题都展示了栈如何有效地处理这些计算,同时提供了相应的时间和空间复杂度分析。
586

被折叠的 条评论
为什么被折叠?



