@@ -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
212228class 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
275315class 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