当前位置: 首页 > article >正文

LeetCode 1003. 检查替换后的词是否有效

【LetMeFly】1003.检查替换后的词是否有效

力扣题目链接:https://leetcode.cn/problems/check-if-word-is-valid-after-substitutions/

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

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

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

如果字符串 s 有效,则返回 true;否则,返回 false

 

示例 1:

输入:s = "aabcbc"
输出:true
解释:
"" -> "abc" -> "aabcbc"
因此,"aabcbc" 有效。

示例 2:

输入:s = "abcabcababcc"
输出:true
解释:
"" -> "abc" -> "abcabc" -> "abcabcabc" -> "abcabcababcc"
因此,"abcabcababcc" 有效。

示例 3:

输入:s = "abccba"
输出:false
解释:执行操作无法得到 "abccba" 。

 

提示:

  • 1 <= s.length <= 2 * 104
  • s 由字母 'a''b''c' 组成

方法一:栈

开辟一个字符栈,遍历字符串:

  • 如果当前字符是a就入栈

  • 如果当前字符是b就看栈顶是否是a,是a就将a换成b,不是a就返回false

  • 如果当前字符是c就看栈顶是否是b,是b就让b出栈,不是b就返回false

  • 时间复杂度 O ( l e n ( s ) ) O(len(s)) O(len(s))

  • 空间复杂度 O ( l e n ( s ) ) O(len(s)) O(len(s))

AC代码

C++

class Solution {
public:
    bool isValid(string& s) {
        stack<char> st;
        for (char c : s) {
            if (c == 'a') {
                st.push('a');
            }
            else if (c == 'b') {
                if (st.empty() || st.top() != 'a') {
                    return false;
                }
                else {
                    st.pop();
                    st.push('b');
                }
            }
            else {
                if (st.empty() || st.top() != 'b') {
                    return false;
                }
                else {
                    st.pop();
                }
            }
        }
        return st.empty();
    }
};

Python

class Solution:
    def isValid(self, s: str) -> bool:
        st = []
        for c in s:
            if c == 'a':
                st.append('a')
            elif c == 'b':
                if not len(st) or st[-1] != 'a':
                    return False
                else:
                    st[-1] = 'b'
            else:
                if not len(st) or st[-1] != 'b':
                    return False
                else:
                    st.pop()
        return not len(st)

同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/130470201


http://www.kler.cn/a/16346.html

相关文章:

  • 有了Makefile, CMake存在的意义是什么?如何借助Makefile构建ObjC语言编译环境?如何获取编译器的版本号?
  • 企业一站式管理系统odoo的研究——PLM插件的搭建
  • 【教程】Ubuntu设置alacritty为默认终端
  • 【OpenEuler】配置虚拟ip
  • jmeter介绍、使用方法、性能测试、现参数化和数据驱动、分布式测试、压力测试、接口测试
  • MySql结合element-plus pagination的分页查询
  • ChatGPT- 开始使用 ChatGPT 并访问 OpenAI 获取 API Keys
  • 介绍tcpdump在centos中的使用方法
  • c++ 11标准模板(STL) std::vector (四)
  • Node服务端开发【NPM】
  • USB转串口芯片CH9101U
  • 当一个测试人员说他“测完了”,里面的坑是什么?
  • [创新工具和方法论]-02- DOE实验设计步骤
  • Adobe Photoshop 软件下载
  • 网络基础:socket套接字
  • 极客之眼 Nmap:窥探世界的第一步
  • chatGPT国内可用镜像源地址
  • 商城管理系统的数据表从属关系+navicat建表操作+数据库文件转储并入代码操作
  • 改进YOLOv5/YOLOv8:(创新必备)全新注意力机制DAED-Conv | 高效轻量化注意力下采样 | 大幅降低参数量的同时增加模型精度。
  • 嗯,这个树怎么和往常不一样?
  • 一篇文章让你彻底掌握 Shell
  • [架构之路-178]-《软考-系统分析师》-17-嵌入式系统分析与设计- 3- 分区操作系统(Partition Operating System)概述
  • 【微机原理】8088/8086CPU引脚
  • 基于SSM+SpringBoot+Vue的快递物流仓库管理系统
  • 5、产品运营 - 产品管理系列文章
  • 【网络原理】网络通信与协议