(栈)1047. 删除字符串中的所有相邻重复项(java)

1.题目详情:

2.实例:

3.分析:

思路就是栈  一个个对比  空的时候入栈  然后不为空的时候 拿到目标元素  如果目标元素跟栈顶元素相同  就不给入栈  而且还要把相同的那个栈顶元素给出栈(不要它了) 如果目标元素跟栈顶元素不一样直接入栈就可以

4.具体实现:

package com.ffyc.algorithm;

import java.util.EmptyStackException;
import java.util.Stack;

public class stack1047 {
    //力扣   栈和队列
    //题目:1047. 删除字符串中的所有相邻重复项
    /*描述:
给出由小写字母组成的字符串S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 S 上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
    */

    public String removeDuplicates(String s) {

        Stack<Character> stack=new Stack<>();//Character
        for (int i=0;i<s.length();i++){
           char ss= s.charAt(i);//拿到字符串一个个字符

           if (stack.isEmpty()||ss!=stack.peek()){//如果栈为空  直接给入  再来元素的时候||可以忽视如果为空的情况  当ss跟栈顶元素不相同 入栈
               stack.push(ss);
           }else{   //如果跟栈顶元素相同 不入栈 把相同的弹出
               stack.pop();
           }
        }

        //一个个拿出来组装成一个字符串
        String str="";
        while (!stack.isEmpty()){//栈不是空就循环
            str=stack.pop()+str;//注意弹出来的顺序  str+=stack.pop()就不行  顺序反了
        }
return str;

    }

    public static void main(String[] args) {

        stack1047 stack1047=new stack1047();
        String s="abbccanm";
        System.out.println(stack1047.removeDuplicates(s));
    }
}

5.运行测试:

 6.力扣提交:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

团团kobebryant

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

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

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

打赏作者

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

抵扣说明:

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

余额充值