【算法】Check If Word Is Valid After Substitutions 检查替换后的词是否有效

这篇具有很好参考价值的文章主要介绍了【算法】Check If Word Is Valid After Substitutions 检查替换后的词是否有效。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Check If Word Is Valid After Substitutions 检查替换后的词是否有效

问题描述:

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

将字符串 “abc” 插入到 t 中的任意位置。形式上,t 变为 tleft + “abc” + tright,其中 t == tleft + tright 。注意,tleft 和 tright 可能为 空 。
如果字符串 s 有效,则返回 true;否则,返回 false。
s.length范围 [ 1 , 20000 ] [1,20000] [1,20000],仅由abc构成。

分析

使用暴力构造的方法,就是每构造一个有效的 s ′ s' s,然后在 s ′ s' s的每个位置上插入 a b c abc abc,直到达到目标的 s s s长度。但是 s ′ s' s越长,枚举的位置越多,时间复杂度也越大。

同样逆向的做dfs,每次找到一个abc,然后删除,但是这样也会面临相同的问题。

还有一种暴力的思路,就是 r e p l a c e replace replace,每一次将所有符合条件的abc,全部用空字符串替换,直到整个 s s s,不存在 a b c abc abc,判断s是否是空字符串
replace作为封装的string API,确实可以处理这个问题,但是另一方面,这个replace过程中对空间,时间上的消耗,可以思考一下。

这个问题可以抽象成为一个栈,类似于括号匹配。abc可以抽象的作为一个 ( ) () (),

  • 遇到字符 a a a,可以直接入栈。
  • 遇到字符b,如果要符合条件,那么此时栈顶必须是a,也就是说,如果栈空或者栈顶 t o p ! = a top!=a top!=a,说明无法满足题目的条件,返回 f a l s e false false。否则可以将栈顶 修改为 b 修改为b 修改为b
  • 遇到字符c,其实和字符b是一样的处理,也是只关心栈顶是否是b。

整个流程遍历一次,最大的空间就是开栈,时间复杂度** O ( N ) O(N) O(N),空间** O ( N ) O(N) O(N)

时间复杂度 O ( N ) O(N) O(N)
空间复杂度: O ( N ) O(N) O(N)

代码

public boolean isValid(String s) {
        while(s.indexOf("abc")!=-1){
            s = s.replace("abc","");
        }
        return s.equals("");
    }

时间复杂度 O ( N ) O(N) O(N)
空间复杂度: O ( N ) O(N) O(N)

 public boolean isValid(String s) {
        Deque<Integer> st = new ArrayDeque();
        for(int i=0;i<s.length();i++){
            int c = s.charAt(i)-'a';
            if(c==0){
                st.push(c);
                continue;
            }
            if(st.isEmpty()) return false;
            int top = st.pop();
            if(c-top!=1)return false;
            if(c==1){
                st.push(c);
            } 
        } 
        return st.isEmpty(); 
    }

代码还可以再压缩,但是基本流程是这样。
时间复杂度 O ( N ) O(N) O(N)
空间复杂度: O ( N ) O(N) O(N)

Tag

文章来源地址https://www.toymoban.com/news/detail-434085.html

到了这里,关于【算法】Check If Word Is Valid After Substitutions 检查替换后的词是否有效的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 17、Health Check 健康检查

    强大的自愈能力是kubernetes容器编排引擎的重要特性。 自愈的默认实现方式是自动重启发生故障的容器 。除此之外,还可通过 Liveness和Readiness探测机制 设置更精细的健康检查,进而实现如下要求: 零停机部署 避免部署无效的镜像 更加安全的滚动升级 Liveness探测和Readiness探测

    2024年02月07日
    浏览(46)
  • MySQL(32)MySQL 检查约束(CHECK)

    MySQL 检查约束(CHECK)是用来检查数据表中字段值有效性的一种手段,可以通过 CREATE TABLE 或 ALTER TABLE 语句实现。设置检查约束时要根据实际情况进行设置,这样能够减少无效数据的输入。 检查约束使用 CHECK ,具体的语法格式如下: 其中,“表达式”指的就是 SQL

    2024年02月07日
    浏览(35)
  • 如何优雅的写代码-替代大量if else的@valid、@validated注解

    @Valid 注解通常用于对象属性字段的规则检测,具体啥意思,下面让我娓娓道来: 下面我们以新增一个员工为功能切入点,以常规写法为背景,慢慢烘托出 @Valid 注解用法详解。 那么,首先,我们会有一个员工对象 Employee,如下 :首先我们会有一个员工对象 Employee,如下 :

    2024年01月18日
    浏览(43)
  • LeetCode --- 1790. Check if One String Swap Can Make Strings Equal 解题报告

    You are given two strings  s1  and  s2  of equal length. A  string swap  is an operation where you choose two indices in a string (not necessarily different) and swap the characters at these indices. Return  true   if it is possible to make both strings equal by performing  at most one string swap  on  exactly one  of the strings.  Otherwise, re

    2024年02月10日
    浏览(56)
  • OWASP Dependency-Check简单教程,及检查mybatis和压制bug的过程

    教程: https://www.jianshu.com/p/f1a2f5357d12 资源下载: https://download.csdn.net/download/tiantangpw/88041075 命令行参数说明 https://jeremylong.github.io/DependencyCheck/dependency-check-cli/arguments.html 压制bug文件说明 https://github.com/jeremylong/DependencyCheck/blob/main/src/site/markdown/general/suppression.md   检测方法: 下载

    2024年02月16日
    浏览(31)
  • Unexpected token ‘‘‘, “‘{“type“:““... is not valid JSON

    尝试低代码schema解析JSON时报错,奇怪的是控制台解析正常,项目js执行JSON.parse()报错,简直无语了,,, 只能挨个检查了,首先温习了下JSON 的标准格式: JSON的合法符号:{(左大括号) }(右大括号) \\\"(双引号) :(冒号) ,(逗号) [(左中括号) ](右中括号) JSON字符串:特殊字符可在字符

    2024年02月06日
    浏览(31)
  • SyntaxError: Unexpected XXX‘, “XXXXX“... is not valid JSON

    报错重现: 问题分析: 正确写法 后话 希望这篇文章能帮助你解决当前问题,如果哪里写得有问题可以评论指出,一起学习一起进步,如果觉得还可以可以点个👍哈,栓Q。

    2024年02月17日
    浏览(44)
  • 【zookeeper】问题解决 Authentication is not valid : /hbase/tokenauth

    最近在搭建Hbase 服务时,服务无法启动,于是决定将 hbase 服务删除,在当删除 zookeeper 的 /hbase 节点时报错,报 thentication is not valid : /hbase/tokenauth 。 看到网上大部分的文章都是使用跳过 ACL 或者 开启 super 模式 这两种方式,于是比较好奇有没有第三种解,这里整理并记录一下

    2024年02月14日
    浏览(45)
  • 【Django-报错处理】form.is_valid()方法报错:KeyError: ‘###‘

    最初,报错的form表单验证部分如下: 经过查阅资料后发现,如果 password1 字段不能满足定义的要求(最小六个字符长度)的话,就不会出现在 cleaned_data 中,因此 clean 方法在取值时发生错误。 根据上面的原理,我们只要先验证其是否在 cleaned_data 中,再判断其是否相等就可以

    2024年02月13日
    浏览(36)
  • flink 单作业模式部署提交作业爆:Trying to access closed classloader. Please check if you store classloaders direc

    指令信息 报错信息:Exception in thread “Thread-5” java.lang.IllegalStateException: Trying to access closed classloader. Please check if you store classloaders directly or indirectly in static fields. If the stacktrace suggests that the leak occurs in a third party library and cannot be fixed immediately, you can disable this check with the configu

    2024年02月16日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包