Skip to content

Commit f314207

Browse files
author
luzhicheng
committed
update
update
1 parent bdb8eab commit f314207

File tree

5 files changed

+61
-17
lines changed

5 files changed

+61
-17
lines changed

leetcode_stack/main.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
* [有效的括号](有效的括号.md)
1515
* [用栈实现队列](用栈实现队列.md)
1616
* [用队列实现栈](用队列实现栈.md)
17+
* [删除字符串中的所有相邻重复项](删除字符串中的所有相邻重复项.md)
18+
* [逆波兰表达式求值](逆波兰表达式求值.md)
1719

1820
<!--
1921
2. [最小栈](最小栈.md)
Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
## 删除字符串中的所有相邻重复项
1+
# 1047.删除字符串中的所有相邻重复项
2+
## 题目
23
给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
34

45
在 S 上反复执行重复项删除操作,直到无法继续删除。
@@ -13,27 +14,23 @@
1314
例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"
1415
```
1516

16-
代码:
17-
* 变量字符串,如果此时栈为空,元素入栈
18-
* 如果此时栈不为空,弹栈,将元素与弹栈元素比较
19-
* 如果不相等,将弹栈元素再入栈,将新元素也入栈
17+
## 分析
18+
![](../pic/leetcode_stack/1047_1.gif)
19+
20+
* 利用栈后进先出特性
21+
* 遍历字符串,如果栈为空就入栈,如果栈不为空,比较栈顶元素与当前元素,如果相同就弹栈,不相同就入栈
2022

2123
```python
2224
def removeDuplicates(S):
2325
stack = []
24-
for item in S:
26+
for char in S:
2527
if not stack:
26-
stack.append(item)
28+
stack.append(char)
2729
continue
28-
29-
while stack:
30-
ele = stack.pop()
31-
if ele == item:
32-
break
33-
else:
34-
stack.append(ele)
35-
stack.append(item)
36-
break
37-
30+
if stack[-1] == char:
31+
# 弹栈
32+
stack.pop()
33+
continue
34+
stack.append(char)
3835
return ''.join(stack)
3936
```
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# 150.逆波兰表达式求值
2+
## 题目
3+
根据 逆波兰表示法,求表达式的值。
4+
5+
有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
6+
* 整数除法只保留整数部分。
7+
* 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。
8+
9+
```python
10+
输入:tokens = ["2","1","+","3","*"]
11+
输出:9
12+
解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9
13+
```
14+
15+
#### 逆波兰表达式:
16+
逆波兰表达式是一种后缀表达式,所谓后缀就是指算符写在后面。
17+
* 平常使用的算式则是一种中缀表达式,如 ( 1 + 2 ) * ( 3 + 4 ) 。
18+
* 该算式的逆波兰表达式写法为 ( ( 1 2 + ) ( 3 4 + ) * ) 。
19+
20+
## 分析
21+
* 利用栈,碰到数字就入栈,碰到运算符号就从栈顶弹出两个元素进行运算,并将计算结果入栈
22+
23+
![](../pic/leetcode_stack/150_1.gif)
24+
25+
```python
26+
def evalRPN(tokens):
27+
stack = []
28+
operator = {'+', '-', '*', '/'}
29+
for char in tokens:
30+
if char not in operator:
31+
stack.append(int(char))
32+
continue
33+
num_2 = stack.pop()
34+
num_1 = stack.pop()
35+
if char == '+':
36+
res = num_1 + num_2
37+
elif char == '-':
38+
res = num_1 - num_2
39+
elif char == '*':
40+
res = num_1 * num_2
41+
else:
42+
res = int(num_1 / num_2)
43+
stack.append(res)
44+
return stack[0]
45+
```

pic/leetcode_stack/1047_1.gif

33 KB
Loading

pic/leetcode_stack/150_1.gif

213 KB
Loading

0 commit comments

Comments
 (0)