This commit is contained in:
youngyangyang04
2021-07-03 17:24:49 +08:00
parent 5efc824e84
commit 57326a9bfd
4 changed files with 35 additions and 62 deletions

View File

@ -87,6 +87,8 @@
* 编程语言
* [C++面试&C++学习指南知识点整理](https://github.com/youngyangyang04/TechCPP)
* 项目
* [基于跳表的轻量级KV存储引擎](https://github.com/youngyangyang04/Skiplist-CPP)
* 编程素养
* [看了这么多代码,谈一谈代码风格!](./problems/前序/代码风格.md)

View File

@ -22,24 +22,24 @@ https://leetcode-cn.com/problems/valid-parentheses/
* 注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
* 输入: "()"
* 输出: true
示例 2:
输入: "()[]{}"
输出: true
* 输入: "()[]{}"
* 输出: true
示例 3:
输入: "(]"
输出: false
* 输入: "(]"
* 输出: false
示例 4:
输入: "([)]"
输出: false
* 输入: "([)]"
* 输出: false
示例 5:
输入: "{[]}"
输出: true
* 输入: "{[]}"
* 输出: true
# 思路
@ -90,7 +90,7 @@ cd a/b/c/../../
动画如下:
![20.有效括号](https://code-thinking.cdn.bcebos.com/gifs/20.%E6%9C%89%E6%95%88%E6%8B%AC%E5%8F%B7.gif)
![20.有效括号](https://code-thinking.cdn.bcebos.com/gifs/20.有效括号.gif)
第一种情况已经遍历完了字符串但是栈不为空说明有相应的左括号没有右括号来匹配所以return false
@ -130,10 +130,6 @@ public:
技巧性的东西没有固定的学习方法,还是要多看多练,自己总灵活运用了。
## 其他语言版本
@ -162,33 +158,6 @@ class Solution {
return deque.isEmpty();
}
}
// 方法2
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
Map<Character, Character> map = new HashMap<Character, Character>() {
{
put('}', '{');
put(']', '[');
put(')', '(');
}
};
for (Character c : s.toCharArray()) { // 顺序读取字符
if (!stack.isEmpty() && map.containsKey(c)) { // 是右括号 && 栈不为空
if (stack.peek() == map.get(c)) { // 取其对应的左括号直接和栈顶比
stack.pop(); // 相同则抵消,出栈
} else {
return false; // 不同则直接返回
}
} else {
stack.push(c); // 左括号,直接入栈
}
}
return stack.isEmpty(); // 看左右是否抵消完
}
}
```
Python

View File

@ -34,7 +34,7 @@ https://leetcode-cn.com/problems/implement-stack-using-queues/
有的同学可能疑惑这种题目有什么实际工程意义,**其实很多算法题目主要是对知识点的考察和教学意义远大于其工程实践的意义,所以面试题也是这样!**
刚刚做过[栈与队列:我用栈来实现队列怎么样?](https://mp.weixin.qq.com/s/P6tupDwRFi6Ay-L7DT4NVg)的同学可能依然想着用一个输入队列,一个输出队列,就可以模拟栈的功能,仔细想一下还真不行!
刚刚做过[栈与队列:我用栈来实现队列怎么样?](https://mp.weixin.qq.com/s/Cj6R0qu8rFA7Et9V_ZMjCA)的同学可能依然想着用一个输入队列,一个输出队列,就可以模拟栈的功能,仔细想一下还真不行!
**队列模拟栈,其实一个队列就够了**,那么我们先说一说两个队列来实现栈的思路。
@ -46,18 +46,21 @@ https://leetcode-cn.com/problems/implement-stack-using-queues/
如下面动画所示,**用两个队列que1和que2实现队列的功能que2其实完全就是一个备份的作用**把que1最后面的元素以外的元素都备份到que2然后弹出最后面的元素再把其他元素从que2导回que1。
模拟的队列执行语句如下:
queue.push(1);
queue.push(2);
queue.pop(); // 注意弹出的操作
queue.push(3);
queue.push(4);
queue.pop(); // 注意弹出的操作
queue.pop();
queue.pop();
queue.empty();
模拟的队列执行语句如下:
![225.用队列实现栈](https://code-thinking.cdn.bcebos.com/gifs/225.%E7%94%A8%E9%98%9F%E5%88%97%E5%AE%9E%E7%8E%B0%E6%A0%88.gif)
```
queue.push(1);
queue.push(2);
queue.pop(); // 注意弹出的操作
queue.push(3);
queue.push(4);
queue.pop(); // 注意弹出的操作
queue.pop();
queue.pop();
queue.empty();
```
![225.用队列实现栈](https://code-thinking.cdn.bcebos.com/gifs/225.用队列实现栈.gif)
详细如代码注释所示:
@ -152,7 +155,7 @@ public:
};
```
## 其他语言版本
# 其他语言版本
Java

View File

@ -23,15 +23,14 @@ https://leetcode-cn.com/problems/remove-all-adjacent-duplicates-in-string/
示例:
输入:"abbaca"
输出:"ca"
解释:
例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。
* 输入:"abbaca"
* 输出:"ca"
* 解释:例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。
 
提示:
1 <= S.length <= 20000
S 仅由小写英文字母组成。
* 1 <= S.length <= 20000
* S 仅由小写英文字母组成。
# 思路
@ -64,7 +63,7 @@ S 仅由小写英文字母组成。
如动画所示:
![1047.删除字符串中的所有相邻重复项](https://code-thinking.cdn.bcebos.com/gifs/1047.%E5%88%A0%E9%99%A4%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89%E7%9B%B8%E9%82%BB%E9%87%8D%E5%A4%8D%E9%A1%B9.gif)
![1047.删除字符串中的所有相邻重复项](https://code-thinking.cdn.bcebos.com/gifs/1047.删除字符串中的所有相邻重复项.gif)
从栈中弹出剩余元素此时是字符串ac因为从栈里弹出的元素是倒叙的所以在对字符串进行反转一下就得到了最终的结果。