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

力扣1003题

题目描述:检查替换后的词是否有效

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

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/check-if-word-is-valid-after-substitutions
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

image.png

题解思路:

通过不断替换"abc""",每替换一次就判断一次,为空则说明已经全部替换完毕,返回true;

不能再替换并且不为孔说明需要返回false

class Solution {
      public boolean isValid(String s) {
        String replaceStr;
        while (true){
            replaceStr = s;
            if (!replaceStr.isEmpty()){
                replaceStr = replaceABC(replaceStr);
            }
            //走到这里,说明替换了一次,每替换一次,就判断一次
            if (replaceStr.isEmpty()){
                return true;
            } else if (replaceStr.equals(s)) {
                return false;
            }
            s = replaceStr;
        }
    }

    public static String replaceABC(String s){
        String abc = s.replace("abc", "");
        return abc;
    }
}

还有一种思路,是参考1419道题做的,建立一个记录a b c出现状态的数组,但是这个有bug,比如 String s1 = "aabbcc";这种情况时就不行。有待改进!!!

class Solution1003 {
    public boolean isValid(String s) {
        int[] num = new int[3];
        int length = s.length();
        for(int i=0;i<length;i++){
            //先判断第一个字母是不是'a'
            if(s.charAt(0) != 'a'){
                return false;
            }
            //
            if(s.charAt(i) == 'a'){
                if(num[2] != 0){
                    --num[2];
                }
                ++num[0];
            }else if(s.charAt(i) == 'b'){
                //
                if(num[0] == 0){
                    return false;
                }
                --num[0];
                ++num[1];
            }else if(s.charAt(i) == 'c'){
                //
                if(num[1] == 0){
                    return false;
                }
                --num[1];
                ++num[2];
            }
        }
        return (num[0] == 0 && num[1] == 0) ? true : false;
    }
}
           }
        }
        return (num[0] == 0 && num[1] == 0) ? true : false;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值