检查替换后的词是否有效【LC1003】
给你一个字符串
s
,请你判断它是否 有效 。字符串
s
有效 需要满足:假设开始有一个空字符串t = ""
,你可以执行 任意次 下述操作将t
转换为s
:
- 将字符串
"abc"
插入到t
中的任意位置。形式上,t
变为tleft + "abc" + tright
,其中t == tleft + tright
。注意,tleft
和tright
可能为 空 。如果字符串
s
有效,则返回true
;否则,返回false
。
刚开始想的是根据数量判断的,WA了,好久没用栈进行字符匹配了,经验++
- 思路
同括号匹配,构造的过程可以视为在字符串s中消除连续的abc
的过程,按照匹配规则将字符压栈及出栈,如果最后栈为空,那么返回true
刚开始想的是根据数量判断的,WA了,好久没用栈进行字符匹配了,经验++
- 思路
同括号匹配,构造的过程可以视为在字符串s中消除连续的abc
的过程,按照匹配规则将字符压栈及出栈,如果最后栈为空,那么返回true
- 遇到字符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(); } }