纪念一次面试机试失败的题目:

大概意思就是消除相邻的两个相同的元素,如果消除之后剩下的仍然存在相邻的则,继续消除。:输出剩下元素的数量!

 

比如

输入  aabbcc

输出:0

输入  abddbc

输出:2

思路1:想到的是双指针,消除重复的值,但是bug太多,考虑的情况太多。

思路2:求出最大的回文串之后,长度想减,仍然灭有考虑周全,比如aabbcc,这种情况就会出bug,但是

思路三:也是时间过了自动交卷了,才想到的:

比如用栈的形式,如果相同就弹出知道最后没有为止!代码如下:

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        final String s = scanner.nextLine();
        boolean flag = false;
        Stack<Character> stack = new Stack<>();
        stack.push(s.charAt(0));
        for (int i = 1; i < s.length(); i++) {
            if (!stack.isEmpty()) {
                if (s.charAt(i) == stack.peek()) {
                    stack.pop();
                } else {
                    stack.push(s.charAt(i));
                }
            }else {
                stack.push(s.charAt(i));
            }
        }
        System.out.println(stack.size());

    }

测试结果:现在想来居然这么简单,然后但是就是想了这么久!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

specialApe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值