LeetCode——2390.从字符串中移除星号

166 阅读2分钟

从字符串中移除星号

1.题目链接

2390. 从字符串中移除星号

2.原题描述

给你一个包含若干星号 * 的字符串 s 。

在一步操作中,你可以:

选中 s 中的一个星号。 移除星号 左侧 最近的那个 非星号 字符,并移除该星号自身。 返回移除 所有 星号之后的字符串。

注意:

生成的输入保证总是可以执行题面中描述的操作。 可以证明结果字符串是唯一的

3.相关算法

栈模拟:

使用栈来模拟删除操作。遍历字符串中的每个字符,如果当前字符不是星号,则将其下标的字符入栈。如果当前字符是星号,则将栈顶的字符弹出,最后保存栈中的元素,转化为字符串,返回结果。

4.本题主要思路

本题使用栈模拟,创建一个数据结构栈,通过循环遍历字符串中每个字符,判断该字符是否是星号,当该字符为星号时则将栈顶的字符弹出,不是星号则将其压入栈中,到最后循环结束,栈中的元素转化为字符串的形式返回结果。

5.源码分析

class Solution {
    public String removeStars(String s) {
        Stack<Character> stack = new Stack<>();			// 1
        for(int i = 0;i<s.length();++i){				
            if(s.charAt(i)=='*'){				// 2
                stack.pop();
            }else{
                stack.push(s.charAt(i));			// 3
            }
        }
        StringBuilder result = new StringBuilder();		// 4
        for (Character c : stack) {
            result.append(c);					// 5
        }
        return result.toString();				// 6
    }
}
  1. 创建一个数据结构栈,用于存放字符;
  2. 循环遍历字符串,当该位置的字符是星号时,将此时栈顶中的字符弹出;
  3. 当该位置的字符不是星号时,将该字符压入栈中;
  4. 创建一个字符流,用于将栈中的字符转化为字符串;
  5. 将栈中的字符逐个添加到字符流中;
  6. 将字符流中的字符转化为字符串返回。