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

【数据结构-邻项消除】力扣1003. 检查替换后的词是否有效

给你一个字符串 s ,请你判断它是否 有效 。
字符串 s 有效 需要满足:假设开始有一个空字符串 t = “” ,你可以执行 任意次 下述操作将 t 转换为 s :

将字符串 “abc” 插入到 t 中的任意位置。形式上,t 变为 tleft + “abc” + tright,其中 t == tleft + tright 。注意,tleft 和 tright 可能为 空 。
如果字符串 s 有效,则返回 true;否则,返回 false。

示例 1:
输入:s = “aabcbc”
输出:true
解释:
“” -> “abc” -> “aabcbc”
因此,“aabcbc” 有效。

示例 2:
输入:s = “abcabcababcc”
输出:true
解释:
“” -> “abc” -> “abcabc” -> “abcabcabc” -> “abcabcababcc”
因此,“abcabcababcc” 有效。

示例 3:
输入:s = “abccba”
输出:false
解释:执行操作无法得到 “abccba” 。
在这里插入图片描述

模拟栈

class Solution {
public:
    bool isValid(string s) {
        string st;
        for(char c : s){
            st.push_back(c);
            if(st.size() >= 3 && st.substr(st.size() - 3, 3) == "abc"){
                st.erase(st.end() - 3, st.end());
            }
        }
        return st.empty();
    }
};

时间复杂度:O(n),其中 n 是字符串 s 的长度。

空间复杂度:O(n)。栈需要占用 O(n) 的空间。

我们可以采用模拟栈的方法,由于一开始t字符串第一次操作后一定是"abc",所以我们可以一旦遇到abc,就将它消除。在栈中表现为如果栈顶三个元素为"abc",那么就将它弹出,最后如果st变为空,则说明可以通过将字符串 “abc” 插入到 t 中的任意位置,得到字符串s。


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

相关文章:

  • es拼音分词器(仅供自己参考)
  • C++ 实现俄罗斯方块游戏
  • Transformer+KAN系列时间序列预测代码
  • 【element ui系列】分享几种实现el-table表格单选的方法
  • 【创建型】单例模式
  • Golang | Leetcode Golang题解之第526题优美的排列
  • 笔记本电脑死机恢复按什么键恢复 电脑死机的解决方法
  • Python 淘宝数据挖掘与词云图制作全攻略
  • Redis特性和应用场景以及安装
  • 私有化视频平台EasyCVR海康大华宇视视频平台视频诊断技术是如何实时监测视频质量的?
  • 在 Windows 系统上设置 MySQL8.0以支持远程连接
  • ES(ElaticSearch)详解(含工作原理、基本知识、常见问题和优化方法)
  • helm push http: server gave HTTP response to HTTPS client
  • 包括 Nginx、Gateway、Nacos、Dubbo、Sentinel、RocketMQ 和 Seata 的调用链路描述:
  • git入门教程5:git仓库操作
  • 【P2-2】ESP8266 WIFI模块在STA模式下作为TCP客户端与电脑/手机网络助手(TCP服务端)通信——TCP数据透传
  • linux 原子操作
  • spring集成kafka
  • C++ 基础语法 一
  • 计算机低能儿从0刷leetcode | 34.在排序数组中查找元素的第一个和最后一个位置 | 二分法
  • 微服务实战系列之玩转Docker(十六)
  • 一文解析axios源码
  • uniapp MD5加密
  • 网络请求优化:理论与实践
  • Oracle视频基础1.3.7练习
  • 【python】爬虫