吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 946|回复: 8
收起左侧

[Java 原创] java - 栈 - 点击消除相邻重复的字母

  [复制链接]
dxxbjl 发表于 2023-3-28 19:50
给出一个字符串,每次“点击”,可以把字符串中相邻两个相同字母消除,例如,字符串"abbc"点击后可以生成"ac"。
        但相同而不相邻、不相同的相邻字母都是不可以被消除的。如果一直点击,字符串的最终形态是什么?

整理要求:
1、一个字符串
2、消除相邻的两个元素
3、打印最终元素

思路:把它看成入栈与出栈,如果相邻的两次入栈元素相同,就让栈顶元素出栈,最后打印结果。

[Java] 纯文本查看 复制代码
public static void main(String[] args) {
    
        Stack<Character> stack = new Stack();

        Scanner sc =new Scanner(System.in);

        String str = sc.nextLine();

        for(int i =0;i<str.length();i++){
            char ch =str.charAt(i);
            if(stack.isEmpty() || ch !=stack.peek()){
                stack.push(ch);
            }else if(ch == stack.peek()){
                stack.pop();
            }
        }
        String str2 ="";
        //输出if(stack.isEmpty()){//如果是空栈,打印0
            System.out.println(0);
        }else{//如果不是空栈,循环出栈,反转字符串
            
            while(!stack.isEmpty()){
               str2 += stack.pop(); //将出栈的元素赋值给 str2,但这个str2是出栈的顺序,是反着的
            }
            
        }
        
        String str3 ="";    //使用str3来反转str2
        for(int i=str2.length()-1;i>=0;i--){
            str3 += str2.charAt(i);
        }
        System.out.println(str3);   //打印结果
    }

免费评分

参与人数 2吾爱币 +8 热心值 +2 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
mc0.0 + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

17689207110 发表于 2023-3-29 09:38
[Java] 纯文本查看 复制代码
import java.util.*;

public class StringClicker {
    public static void main(String[] args) {
        String str = "abbc";
        String result = click(str);
        System.out.println(result); // 输出:ac
    }

    public static String click(String str) {
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if (!stack.isEmpty() && stack.peek() == c) {
                stack.pop(); // 弹出相邻相同字母
            } else {
                stack.push(c); // 压入不同或相邻不同字母
            }
        }
        StringBuilder sb = new StringBuilder();
        while (!stack.isEmpty()) {
            sb.append(stack.pop()); // 从栈底到栈顶组成最终形态的字符串
        }
        return sb.reverse().toString(); // 反转字符串,从左到右是原字符串中从右到左的顺序
    }
}

免费评分

参与人数 1热心值 +1 收起 理由
林伊轩 + 1 我很赞同!

查看全部评分

jianghan4733 发表于 2023-3-28 21:32
Pojawa 发表于 2023-3-29 08:21
感谢技术分享,这个思路耐人寻味,但是讲真的我想象不到这个逻辑的应用场景是什么,可能是做游戏会用到吧?
wjzycxdhh 发表于 2023-3-29 09:42
感谢分享
林伊轩 发表于 2023-3-29 10:07
17689207110 发表于 2023-3-29 09:38
[mw_shl_code=java,true]import java.util.*;

public class StringClicker {

看到原文想说str2 str3不应该用string类型
zongze3055 发表于 2023-3-29 11:49
感谢分享
zha3750 发表于 2023-3-29 14:29
17689207110 发表于 2023-3-29 09:38
[mw_shl_code=java,true]import java.util.*;

public class StringClicker {

感谢楼主的分享
moonmicah 发表于 2023-3-29 14:39
感谢楼主的分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-3-29 08:18

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表