从字符串中移除星号
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
}
}
- 创建一个数据结构栈,用于存放字符;
- 循环遍历字符串,当该位置的字符是星号时,将此时栈顶中的字符弹出;
- 当该位置的字符不是星号时,将该字符压入栈中;
- 创建一个字符流,用于将栈中的字符转化为字符串;
- 将栈中的字符逐个添加到字符流中;
- 将字符流中的字符转化为字符串返回。