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

题目链接

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

题目描述

在这里插入图片描述

题解

题解一(Java)

作者:@仲景
题挺难懂的,很绕,然后读懂了就很简单了
就是说本来是一个字符串s,abc三个字符可以随便放在s原本字符串的左边或者右边,但是不能放在中间
然后上面步骤得到一个字符串后,继续放abc,和上面一样,也是只能放在左右
所以说如果答案是true,那么一定有一个abc是连着的,去掉这个abc以后,一定还会诞生另一个连着的abc,所以只要每次判断abc在不在s里,一次一次的把abc去掉就可以了
如果最后abc都会消没了,那么就是对的,如果还留着不成套的abc,那么就是错的

class Solution {
    public boolean isValid(String s) {
        while (s.contains("abc")) {
            s = s.replace("abc", "");
        }
        return s.length() == 0;
    }
}

题解二(Java)

作者:@仲景
由题解一可以得出,如果结果为true,必定有一组abc是相连的,并且去掉一组abc后,还会出现一组相连的,一直到结束
所以我们可以得出结论,如果我们把所有字符依次入栈,遇到abc一组相连就全部弹出,如果结果为true,那么一定可以把所有字符都弹完
那么就可以得出abc的出入栈规则
a:直接入栈
b:如果前面是a就入栈
c:如果前面是b,就把前面的ab全部弹出
那我们就可以实现如下代码

class Solution {
    public boolean isValid(String s) {
        LinkedList<Character> stack = new LinkedList<>();

        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c == 'a') {
                stack.addLast(c);
            } else if (c == 'b') {
                if (!stack.isEmpty() && stack.getLast() == 'a') {
                    stack.addLast(c);
                } else {
                    return false;
                }
            } else {
                if (!stack.isEmpty() && stack.getLast() == 'b') {
                    stack.removeLast();
                    stack.removeLast();
                } else {
                    return false;
                }
            }
        }
        return stack.isEmpty();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值