Skip to content

Commit 873086e

Browse files
committed
Update 01.Stack-Basic.md
1 parent e68a6db commit 873086e

File tree

1 file changed

+74
-29
lines changed

1 file changed

+74
-29
lines changed

Contents/03.Stack/01.Stack-Basic/01.Stack-Basic.md

Lines changed: 74 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -185,28 +185,44 @@ class Stack:
185185

186186
#### 3.1.2 题目大意
187187

188-
给定一个只包括 `'('``')'``'{'``'}'``'['``']'` 的字符串 `s`
188+
**描述**给定一个只包括 `'('``')'``'{'``'}'``'['``']'` 的字符串 `s`
189189

190-
要求:判断括号是否匹配。如果匹配,返回 `True`,否则返回 `False`
190+
**要求**:判断字符串 `s` 是否有效(即括号是否匹配)。
191+
192+
**说明**
193+
194+
- 有效字符串需满足:
195+
1. 左括号必须用相同类型的右括号闭合。
196+
2. 左括号必须以正确的顺序闭合。
197+
198+
**示例**
199+
200+
```Python
201+
输入:s = "()"
202+
输出:True
203+
204+
205+
输入:s = "()[]{}"
206+
输出:True
207+
```
191208

192209
#### 3.2.3 解题思路
193210

194-
括号匹配是「栈」的经典应用。
211+
##### 思路 1:栈
195212

196-
我们可以用栈来解决这道题。具体做法如下:
213+
括号匹配是「栈」的经典应用。我们可以用栈来解决这道题。具体做法如下:
197214

198-
- 先判断一下字符串的长度是否为偶数。因为括号是成对出现的,所以字符串的长度应为偶数,可以直接判断长度为奇数的字符串不匹配。
199-
- 如果字符串长度为奇数,则说明字符串 `s` 中的括号不匹配,直接返回 `False`
200-
- 使用栈 `stack` 来保存未匹配的左括号。然后依次遍历字符串 `s` 中的每一个字符。
201-
- 如果遍历到左括号时,将其入栈。
202-
- 如果遍历到右括号时,先看栈顶元素是否是与当前右括号相同类型的左括号。
203-
- 如果是相同类型的左括号,则令其出栈,继续向前遍历。
204-
- 如果不是相同类型的左括号,则说明字符串 `s` 中的括号不匹配,直接返回 `False`
205-
- 遍历完,再判断一下栈是否为空。
206-
- 如果栈为空,则说明字符串 `s` 中的括号匹配,返回 `True`
207-
- 如果栈不为空,则说明字符串 `s` 中的括号不匹配,返回 `False`
215+
1. 先判断一下字符串的长度是否为偶数。因为括号是成对出现的,所以字符串的长度应为偶数,可以直接判断长度为奇数的字符串不匹配。如果字符串长度为奇数,则说明字符串 `s` 中的括号不匹配,直接返回 `False`
216+
2. 使用栈 `stack` 来保存未匹配的左括号。然后依次遍历字符串 `s` 中的每一个字符。
217+
1. 如果遍历到左括号时,将其入栈。
218+
2. 如果遍历到右括号时,先看栈顶元素是否是与当前右括号相同类型的左括号。
219+
1. 如果是与当前右括号相同类型的左括号,则令其出栈,继续向前遍历。
220+
2. 如果不是与当前右括号相同类型的左括号,则说明字符串 `s` 中的括号不匹配,直接返回 `False`
221+
3. 遍历完,还要再判断一下栈是否为空。
222+
1. 如果栈为空,则说明字符串 `s` 中的括号匹配,返回 `True`
223+
2. 如果栈不为空,则说明字符串 `s` 中的括号不匹配,返回 `False`
208224

209-
#### 3.2.4 代码
225+
##### 思路 1:代码
210226

211227
```Python
212228
class Solution:
@@ -238,6 +254,11 @@ class Solution:
238254
return False
239255
```
240256

257+
##### 思路 1:复杂度分析
258+
259+
- **时间复杂度**:$O(n)$。
260+
- **空间复杂度**:$O(1)$。
261+
241262
### 3.2 表达式求值问题
242263

243264
#### 3.2.1 题目链接
@@ -246,30 +267,49 @@ class Solution:
246267

247268
#### 3.2.2 题目大意
248269

249-
给定一个字符串表达式 `s`,表达式中所有整数为非负整数,运算符只有 `+``-``*``/`,没有括号。
270+
**描述**给定一个字符串表达式 `s`,表达式中所有整数为非负整数,运算符只有 `+``-``*``/`,没有括号。
250271

251-
要求:实现一个基本计算器来计算并返回它的值。
272+
**要求**:实现一个基本计算器来计算并返回它的值。
273+
274+
**说明**
275+
276+
- $1 \le s.length \le 3 * 10^5$。
277+
- `s` 由整数和算符(`+``-``*``/`)组成,中间由一些空格隔开。
278+
- `s` 表示一个有效表达式。
279+
- 表达式中的所有整数都是非负整数,且在范围 $[0, 2^{31} - 1]$ 内。
280+
- 题目数据保证答案是一个 32-bit 整数。
281+
282+
**示例**
283+
284+
```Python
285+
输入:s = "3+2*2"
286+
输出:7
287+
288+
289+
输入:s = " 3/2 "
290+
输出:1
291+
```
252292

253293
#### 3.2.3 解题思路
254294

255-
表达式求值问题也是栈的经典应用。
295+
##### 思路 1:栈
256296

257-
在计算表达式中,乘除运算优先于加减运算。我们可以先进行乘除运算,再将进行乘除运算后的整数值放入原表达式中相应位置,再依次计算加减。
297+
计算表达式中,乘除运算优先于加减运算。我们可以先进行乘除运算,再将进行乘除运算后的整数值放入原表达式中相应位置,再依次计算加减。
258298

259299
可以考虑使用一个栈来保存进行乘除运算后的整数值。正整数直接压入栈中,负整数,则将对应整数取负号,再压入栈中。这样最终计算结果就是栈中所有元素的和。
260300

261-
具体做法如下
301+
具体做法
262302

263-
- 遍历字符串 `s`,使用变量 `op` 来标记数字之前的运算符,默认为 `+`
264-
- 如果遇到数字,继续向后遍历,将数字进行累积计算,得到完整的整数 `num`。判断当前 `op` 的符号。
265-
- 如果 op`+`,则将 `num` 压入栈中。
266-
- 如果 op`-`,则将 `-num` 压入栈中。
267-
- 如果 op`*`,则将栈顶元素 `top` 取出,计算 `top * num`,并将计算结果压入栈中。
268-
- 如果 op`/`,则将栈顶元素 `top` 取出,计算 `int(top / num)`,并将计算结果压入栈中。
269-
- 如果遇到 `+``-``*``/` 操作符,则更新 `op`
270-
- 最后将栈中整数进行累加,并返回结果。
303+
1. 遍历字符串 `s`,使用变量 `op` 来标记数字之前的运算符,默认为 `+`
304+
2. 如果遇到数字,继续向后遍历,将数字进行累积,得到完整的整数 num。判断当前 op 的符号。
305+
1. 如果 `op``+`,则将 `num` 压入栈中。
306+
2. 如果 `op``-`,则将 `-num` 压入栈中。
307+
3. 如果 `op``*`,则将栈顶元素 `top` 取出,计算 `top * num`,并将计算结果压入栈中。
308+
4. 如果 `op``/`,则将栈顶元素 `top` 取出,计算 `int(top / num)`,并将计算结果压入栈中。
309+
3. 如果遇到 `+``-``*``/` 操作符,则更新 `op`
310+
4. 最后将栈中整数进行累加,并返回结果。
271311

272-
#### 3.2.4 代码
312+
##### 思路 1:代码
273313

274314
```Python
275315
class Solution:
@@ -303,6 +343,11 @@ class Solution:
303343
return sum(stack)
304344
```
305345

346+
##### 思路 1:复杂度分析
347+
348+
- **时间复杂度**:$O(n)$。
349+
- **空间复杂度**:$O(n)$。
350+
306351
## 参考资料
307352

308353
- 【书籍】数据结构与算法 Python 语言描述 - 裘宗燕 著

0 commit comments

Comments
 (0)