开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情
1、写在前面
大家好,这里是【LeetCode刷题日志】。今天的两道题分别是:
- 有效的括号
- 删除字符串中的所有相邻重复项
2、内容
2.1、题一
(1) 描述
(2) 举例
(3) 解题
class Solution {
public:
bool isValid(string s) {
// 如果字符串的长度为奇数,则返回false
if (s.length() % 2 != 0) return false;
// 定义一个工作栈,存储char类型的元素
stack<char> st;
// 遍历字符串
for ( char ch : s) {
// 如果当前字符是 '(' , 则将 ')' 压入栈
if (ch == '(') {
st.push( ')' );
}
// 如果当前字符是 '{' , 则将 '}' 压入栈
else if (ch == '{') {
st.push('}');
}
// 如果当前字符是 '[' , 则将 ']' 压入栈
else if (ch == '[') {
st.push(']');
}
// 如果字符串还未遍历结束,栈就空了(无对应匹配的字符),此时返回 false
else if (st.empty()) {
return false;
}
// 在遍历字符串时,如果当前字符与栈顶元素不匹配,则返回 false
else if(st.top() != ch){
return false;
}
// 当前字符与栈顶元素匹配,则弹出当前的栈顶元素
else {
st.pop();
}
}
// 当我们遍历完字符串后,如果栈为空,则说明每个左符号都有对应的右符号与其对应
if(st.empty()) {
return true;
}
// 如果栈不为空,则说明有某个左符号没有右符号与其对应,此时返回false
else {
return false;
}
}
};
2.2、题二
链接:1047. 删除字符串中的所有相邻重复项 - 力扣(LeetCode)
(1) 描述
(2) 举例
(3) 解题
class Solution {
public:
string removeDuplicates(string s) {
// 定义一个工作栈st
stack<char> st;
// 遍历字符串
for (char ch : s) {
// 如果当前工作栈为空,则将当前字符压入栈中
if(st.empty()) {
st.push(ch);
}
// 如果 当前字符 与 栈顶元素 相匹配,则弹出栈顶元素
else if(ch == st.top()) {
st.pop();
}
// 如果 当前字符 与 栈顶元素 不匹配,则压入当前字符
else {
st.push(ch);
}
}
string str = "";
while (!st.empty()) { // 将栈中元素放到result字符串汇总
str += st.top();
st.pop();
}
reverse (str.begin(), str.end()); // 此时字符串需要反转一下
return str;
}
};
3、写在最后
好的,今天就先刷到这里。