Skip to content

Commit b0fc841

Browse files
author
luzhicheng
committed
更新md
更新md
1 parent a914f72 commit b0fc841

5 files changed

Lines changed: 143 additions & 0 deletions

File tree

leetcode_stack/main.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,7 @@
55
3. [用队列实现栈](用队列实现栈.md)
66
4. [用栈实现队列](用栈实现队列.md)
77
5. [下一个更大元素1](下一个更大元素1.md)
8+
6. [棒球比赛](棒球比赛.md)
9+
7. [比较含退格的字符串](比较含退格的字符串.md)
10+
8. [删除最外层的括号](删除最外层的括号.md)
11+
8. [删除字符串中的所有相邻重复项](删除字符串中的所有相邻重复项.md)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
## 删除字符串中的所有相邻重复项
2+
给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
3+
4+
在 S 上反复执行重复项删除操作,直到无法继续删除。
5+
6+
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
7+
8+
示例:
9+
```python
10+
输入:"abbbaca"
11+
输出:"ca"
12+
解释:
13+
例如,在 "abbaca" 中,我们可以删除 "bbb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"
14+
```
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
## 删除最外层的括号
2+
有效括号字符串为空 ("")、"(" + A + ")" 或 A + B,其中 A 和 B 都是有效的括号字符串,+ 代表字符串的连接。例如,"","()","(())()" 和 "(()(()))" 都是有效的括号字符串。
3+
4+
如果有效字符串 S 非空,且不存在将其拆分为 S = A+B 的方法,我们称其为原语(primitive),其中 A 和 B 都是非空有效括号字符串。
5+
6+
给出一个非空有效字符串 S,考虑将其进行原语化分解,使得:S = P_1 + P_2 + ... + P_k,其中 P_i 是有效括号字符串原语。
7+
8+
对 S 进行原语化分解,删除分解中每个原语字符串的最外层括号,返回 S 。
9+
10+
示例:
11+
```python
12+
输入:"(()())(())"
13+
输出:"()()()"
14+
解释:
15+
输入字符串为 "(()())(())",原语化分解得到 "(()())" + "(())"
16+
删除每个部分中的最外层括号后得到 "()()" + "()" = "()()()"
17+
```
18+
19+
代码:
20+
遍历字符串
21+
22+
* 左括号入栈:若入栈后栈的长度大于1,即该左括号不是原语首个左括号,结果加入'('
23+
* 右括号出栈:若出栈后栈的长度大于0,即该右括号不是原语末个右括号,结果加入')'
24+
25+
```python
26+
def removeOuterParentheses(S):
27+
stack = []
28+
result = ''
29+
for i in S:
30+
if i == '(':
31+
stack.append(i)
32+
if len(stack) > 1:
33+
result += '('
34+
else:
35+
stack.pop()
36+
if len(stack) != 0:
37+
result += ')'
38+
return result
39+
```

leetcode_stack/棒球比赛.md

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
## 棒球比赛
2+
3+
你现在是一场采特殊赛制棒球比赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。
4+
5+
比赛开始时,记录是空白的。你会得到一个记录操作的字符串列表 ops,其中 ops[i] 是你需要记录的第 i 项操作,ops 遵循下述规则:
6+
7+
* 整数 x - 表示本回合新获得分数 x
8+
* \+ 表示本回合新获得的得分是前两次得分的总和。题目数据保证记录此操作时前面总是存在两个有效的分数。
9+
* "D" - 表示本回合新获得的得分是前一次得分的两倍。题目数据保证记录此操作时前面总是存在一个有效的分数。
10+
* "C" - 表示前一次得分无效,将其从记录中移除。题目数据保证记录此操作时前面总是存在一个有效的分数。
11+
* 请你返回记录中所有得分的总和。
12+
13+
示例:
14+
```python
15+
输入:ops = ["5","2","C","D","+"]
16+
输出:30
17+
解释:
18+
"5" - 记录加 5 ,记录现在是 [5]
19+
"2" - 记录加 2 ,记录现在是 [5, 2]
20+
"C" - 使前一次得分的记录无效并将其移除,记录现在是 [5].
21+
"D" - 记录加 2 * 5 = 10 ,记录现在是 [5, 10].
22+
"+" - 记录加 5 + 10 = 15 ,记录现在是 [5, 10, 15].
23+
所有得分的总和 5 + 10 + 15 = 30
24+
```
25+
26+
代码:
27+
* 碰到数字字符串就入栈
28+
* 碰到 "+" "C" "D"就弹栈,计算之后,再把数据入栈
29+
30+
```python
31+
def calPoints(ops):
32+
res = []
33+
for item in ops:
34+
if item not in ['+', 'D', 'C']:
35+
res.append(int(item))
36+
37+
if item == '+':
38+
tmp1 = res.pop()
39+
tmp2 = res.pop()
40+
res.append(tmp2)
41+
res.append(tmp1)
42+
res.append(tmp2 + tmp1)
43+
44+
if item == 'D':
45+
tmp1 = res.pop()
46+
res.append(tmp1)
47+
res.append(tmp1 * 2)
48+
49+
if item == 'C':
50+
res.pop()
51+
return sum(res)
52+
```
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
## 比较含退格的字符串
2+
给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。
3+
4+
注意:如果对空文本输入退格字符,文本继续为空。
5+
6+
示例:
7+
```python
8+
输入:S = "ab#c", T = "ad#c"
9+
输出:true
10+
解释:S 和 T 都会变成 “ac”。
11+
```
12+
13+
代码:
14+
* 碰到“#”就弹栈
15+
* 碰到其他字符就入栈
16+
17+
```python
18+
def backspaceCompare(S, T):
19+
s_stack = []
20+
t_stack = []
21+
for item in S:
22+
if item == '#' and s_stack:
23+
s_stack.pop()
24+
if item != '#':
25+
s_stack.append(item)
26+
27+
for item in T:
28+
if item == '#' and t_stack:
29+
t_stack.pop()
30+
if item != '#':
31+
t_stack.append(item)
32+
33+
return s_stack == t_stack
34+
```

0 commit comments

Comments
 (0)