题目:给你一个包含若干星号 * 的字符串 s 。
在一步操作中,你可以:
- 选中 s 中的一个星号。
- 移除星号 左侧 最近的那个 非星号 字符,并移除该星号自身。
返回移除 所有 星号之后的字符串。
注意:
- 生成的输入保证总是可以执行题面中描述的操作。
- 可以证明结果字符串是唯一的。
解题思路:从遍历的顺序来看,最后遍历到了先删除,用栈来方便解决。
遍历字符,遇到*就弹出栈顶,否则就入栈。
最后把栈里的字符以逆序组成字符串即是答案。
class Solution{ public String removeStars(String s){ Stack<Character>stack=new Stack<>(); for(char ch:s.toCharArray()){ if(ch=='*'){ stack.pop(); }else{ stack.push(ch); } } StringBuilder sb=new StringBuilder(); while(!stack.isEmpty()){ sb.insert(0,stack.pop()); } return sb.toString(); } }