LeetCode 20. 有效的括号
题目链接:
这道题是典型的利用栈的特殊结构来做的,很常见的题。
文章链接:
遍历数组的元素,然后左边的括号都存入栈中,右边的元素如果匹配就删除栈顶元素。
代码如下:
class Solution {
public:
bool isValid(string s) {
stack<char> a;
for (int i = 0; i < s.size(); i++) {
if (s[i] == '(') a.push(')');
else if (s[i] == '{') a.push('}');
else if (s[i] == '[') a.push(']');
else if (a.empty()) return false;
else if (s[i] != a.top()) return false;
else {
a.pop();
}
}
return a.empty();
}
};
有几种特殊情况需要考虑清楚。
LeetCode 1047. 删除字符串中的所有重复项
题目链接:
这道题其实也就是上一道题的思路,只不过要考虑清楚字符串的顺序。
文章链接:
代码如下:
class Solution {
public:
string removeDuplicates(string s) {
stack<char> a;
for(char e : s) {
if (a.empty() || a.top() != e) a.push(e);
else a.pop();
}
string result = "";
while (!a.empty()) {
result += a.top();
a.pop();
}
reverse(result.begin(), result.end());
return result;
}
};
这样的写法就需要在最后把字符串进行反转。
今日学习4小时收获
这两道题都不难,但是逆波兰表达式确实没有搞懂,还需要再多学习一下。多多重复,百炼成钢。