【每日一题Day195】LC1003检查替换后的词是否有效 | 栈

简介: 【每日一题Day195】LC1003检查替换后的词是否有效 | 栈

检查替换后的词是否有效【LC1003】

给你一个字符串 s ,请你判断它是否 有效

字符串 s有效 需要满足:假设开始有一个空字符串 t = "" ,你可以执行 任意次 下述操作将 t转换为s

  • 将字符串 "abc" 插入到 t 中的任意位置。形式上,t 变为 tleft + "abc" + tright,其中 t == tleft + tright 。注意,tlefttright 可能为

如果字符串 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();
    }
}

image.png

目录
相关文章
|
1天前
|
算法
数据结构与算法:栈与队列
数据结构与算法:栈与队列
|
1天前
|
存储 缓存 算法
堆和栈的区别及应用场景
堆和栈的区别及应用场景
|
4天前
|
存储 算法 调度
算法与数据结构-栈篇
算法与数据结构-栈篇
11 0
|
5天前
|
存储 人工智能 程序员
技术心得记录:堆(heap)与栈(stack)的区别
技术心得记录:堆(heap)与栈(stack)的区别
|
7天前
【海贼王的数据航海】栈和队列
【海贼王的数据航海】栈和队列
6 0
|
7天前
|
算法 C语言
【数据结构与算法 经典例题】使用栈实现队列(图文详解)
【数据结构与算法 经典例题】使用栈实现队列(图文详解)
|
7天前
|
算法 C语言
【数据结构与算法 经典例题】使用队列实现栈(图文详解)
【数据结构与算法 经典例题】使用队列实现栈(图文详解)
|
7天前
|
存储 算法 编译器
【数据结构与算法】使用数组实现栈:原理、步骤与应用
【数据结构与算法】使用数组实现栈:原理、步骤与应用
|
7天前
|
算法
【数据结构和算法】---栈和队列的互相实现
【数据结构和算法】---栈和队列的互相实现
7 0
|
7天前
|
缓存 算法
【数据结构和算法】--- 栈
【数据结构和算法】--- 栈
8 0