检查替换后的词是否有效【LC1003】
给你一个字符串
s,请你判断它是否 有效 。字符串
s有效 需要满足:假设开始有一个空字符串t = "",你可以执行 任意次 下述操作将t转换为s:
- 将字符串
"abc"插入到t中的任意位置。形式上,t变为tleft + "abc" + tright,其中t == tleft + tright。注意,tleft和tright可能为 空 。如果字符串
s有效,则返回true;否则,返回false。
刚开始想的是根据数量判断的,WA了,好久没用栈进行字符匹配了,经验++
-
思路
同括号匹配,构造的过程可以视为在字符串s中消除连续的
abc的过程,按照匹配规则将字符压栈及出栈,如果最后栈为空,那么返回true- 遇到字符a,直接入栈
- 遇到字符b,如果栈顶元素不为字符a,那么返回false;栈顶字符为字符a,再将字符a弹出、字符b压入栈中
- 遇到字符c,如果栈顶元素不为字符b,那么返回false;栈顶字符为字符b,再将字符b弹出、字符c不需要压入栈中,此时相当于在该位置插入
-
实现
class Solution { public boolean isValid(String s) { Deque<Character> queue = new LinkedList<>(); for (char c : s.toCharArray()){ if (c == 'a'){ queue.addLast(c); }else if (c == 'b'){ if (queue.isEmpty() || queue.peekLast() != 'a'){ return false; } queue.pollLast(); queue.addLast(c); }else{ if (queue.isEmpty() || queue.peekLast() != 'b'){ return false; } queue.pollLast(); } } return queue.isEmpty(); } }- 复杂度
- 时间复杂度:O(n)O(n)O(n)
- 空间复杂度:O(n)O(n)O(n)
- 复杂度

2万+

被折叠的 条评论
为什么被折叠?



