算法入门小题目——点击消除

简介: 算法入门小题目——点击消除

这个题这样做

先看栈空吗,栈空就放元素,不空判断栈顶元素和当前的字符是否一样,若一样,就不进栈,往后遍历,并弹出栈顶元素

现在栈里面的元素就是我们需要的,但是这是逆序的,我们需要把他存在一个链表里,然后逆置,打印即可

上代码

import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
           String str=in.nextLine();
           func(str);
        }
    }
    public static void func(String str){
        Stack<Character> stack=new Stack<>();
        List<Character> list=new ArrayList<>();
        for(int i=0;i<str.length();i++){
            char ch=str.charAt(i);
            if(stack.isEmpty()||ch!=stack.peek()){
                stack.push(ch);
            }else{
                stack.pop();
            }
        }
        if(stack.isEmpty()){
            System.out.print("0");
        }else{
            while(!stack.isEmpty()){
                list.add(stack.pop());
            }
        }
        Collections.reverse(list);
        for(int i=0;i<list.size();i++){
            System.out.print(list.get(i));
        }
    }
}


这是第一种方法,还有第二种方法,我们采用StringBuilder来做


public class TestDemo {
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        while(in.hasNextLine()){
            String str=in.nextLine();
            StringBuilder stringBuilder=new StringBuilder(str.length());
            int index=-1;
          for(int i=0;i<str.length();i++){
              char ch=str.charAt(i);
              if(index==-1||ch!=stringBuilder.charAt(index)){
                  stringBuilder.append(ch);
              }else{
                  stringBuilder.deleteCharAt(index);
                  index--;
              }
          }
          if(index==-1){
              System.out.println("0");
          }else{
              System.out.println(stringBuilder);
          }
        }
    }
}

用到StringBuilder就避免了逆置

相关文章
|
1月前
|
存储 算法 JavaScript
怎么刷算法,leetcode上有哪些经典题目
怎么刷算法,leetcode上有哪些经典题目
16 0
|
1月前
|
算法
【算法】——动态规划题目讲解
【算法】——动态规划题目讲解
|
1月前
|
机器学习/深度学习 存储 缓存
数据结构从入门到精通——算法的时间复杂度和空间复杂度
算法的时间复杂度和空间复杂度是评估算法性能的两个重要指标。时间复杂度主要关注算法执行过程中所需的时间随输入规模的变化情况,而空间复杂度则关注算法执行过程中所需的最大存储空间或内存空间。
72 0
|
1月前
|
搜索推荐 算法 C语言
C语言选择排序算法,从入门到精通只需1秒!
C语言选择排序算法,从入门到精通只需1秒!
|
1月前
|
机器学习/深度学习 数据采集 监控
机器学习-特征选择:如何使用递归特征消除算法自动筛选出最优特征?
机器学习-特征选择:如何使用递归特征消除算法自动筛选出最优特征?
72 0
|
1天前
|
算法 索引
数据结构与算法-最小生成树入门
数据结构与算法-最小生成树入门
7 0
|
1天前
|
算法
数据结构与算法-AVL树入门
数据结构与算法-AVL树入门
6 0
|
1天前
|
算法 索引
数据结构与算法-三种队列基础入门
数据结构与算法-三种队列基础入门
5 0
|
15天前
|
算法
算法系列--动态规划--背包问题(4)--完全背包拓展题目(上)
算法系列--动态规划--背包问题(4)--完全背包拓展题目(上)
20 0
|
28天前
|
存储 算法 JavaScript
Java入门高频考查算法逻辑基础知识3-编程篇(超详细18题1.8万字参考编程实现)
解决这类问题时,建议采取下面的步骤: 理解数学原理:确保你懂得基本的数学公式和法则,这对于制定解决方案至关重要。 优化算法:了解时间复杂度和空间复杂度,并寻找优化的机会。特别注意避免不必要的重复计算。 代码实践:多编写实践代码,并确保你的代码是高效、清晰且稳健的。 错误检查和测试:要为你的代码编写测试案例,测试标准的、边缘情况以及异常输入。 进行复杂问题简化:面对复杂的问题时,先尝试简化问题,然后逐步分析和解决。 沟通和解释:在编写代码的时候清晰地沟通你的思路,不仅要写出正确的代码,还要能向面试官解释你的
33 0