题目浅析

  • 想查看原题可以点击题目链接

  • 简单地说,就是给一个字符串,该字符串是从一个空字符串开始,不断插入“abc”形成的,这个插入是从字符串的任意处都可以行动。

思路分享

  • 这个题目和实际的题意完全不是一个意思,坏。不过这个不重要。

  • 发现做栈,只要把握一点,就是何时弹栈。例如本题,只要意识到,弹栈的时候,正在遍历的字母是 c,栈顶有 a 和 b,就轻松地写出了条件。

  • 这个条件应该不是最快的,因为只要中间的 abc 有一处无法正确匹配,就可以算是检测不过关,所以更快的思路应该是按照正在遍历的 abc 三种情况,分别检测栈是否符合“正常”。

    https://leetcode.cn/problems/check-if-word-is-valid-after-substitutions/solutions/2253773/zhan-jian-ji-xie-fa-pythonjavacgo-by-end-i9o7/

  • 本题不断插入 abc,并要求检测是否都是 abc,实际上就是一层层包裹的字符串,通过栈就能从内而外地拆分,最后如果只剩下空字符串说明检测不过关。

代码解答(强烈建议自行解答后再看)

  • 参考题解
1
2
3
4
5
6
7
8
9
10
11
class Solution:
def isValid(self, s: str) -> bool:
stk = list()
for c in s:
if len(stk) > 1 and c == 'c' and stk[-1] == 'b' and stk[-2] == 'a':
stk.pop()
stk.pop()
else:
stk.append(c)

return not stk