网站建设中页面设计,自媒体营销推广,响应式网站建设制作需要注意什么,wordpress模板区块链【每日一题】LeetCode 2390 从字符串中移除星号#xff08;栈、字符串、模拟#xff09;
题目描述
给定一个由小写英文字母和星号 * 组成的字符串 s#xff0c;你需要通过一系列操作移除所有的星号。在每一步操作中#xff0c;你可以选中字符串中的一个星号#xff0c;然…【每日一题】LeetCode 2390 从字符串中移除星号栈、字符串、模拟
题目描述
给定一个由小写英文字母和星号 * 组成的字符串 s你需要通过一系列操作移除所有的星号。在每一步操作中你可以选中字符串中的一个星号然后移除该星号左侧最近的非星号字符以及该星号本身。重复这个过程直到所有的星号都被移除。返回移除所有星号之后的字符串。
思路分析
这个问题可以通过模拟操作的过程来解决。我们可以从左到右遍历字符串使用一个栈或者 StringBuffer来存储遍历过程中遇到的非星号字符。当遇到星号时我们检查栈顶是否有元素如果有则弹出栈顶元素即移除最近的非星号字符同时忽略该星号。如果栈为空则直接忽略该星号。遍历结束后栈中剩余的元素即为最终结果。
输入示例
示例 1
输入s leet**cod*e
输出lecoe
解释从左到右执行移除操作
- 距离第 1 个星号最近的字符是 leet**cod*e 中的 t s 变为 lee*cod*e 。
- 距离第 2 个星号最近的字符是 lee*cod*e 中的 e s 变为 lecod*e 。
- 距离第 3 个星号最近的字符是 lecod*e 中的 d s 变为 lecoe 。
不存在其他星号返回 lecoe 。示例 2
输入s erase*****
输出
解释整个字符串都会被移除所以返回空字符串。代码实现
class Solution {public String removeStars(String s) {// 使用StringBuffer来存储最终的字符串StringBuffer str new StringBuffer();int length s.length();// 遍历字符串中的每个字符for (int i 0; i length; i) {char c s.charAt(i);// 如果当前字符不是星号则添加到StringBuffer中if (c ! *) {str.append(c);} else {// 如果当前字符是星号并且StringBuffer不为空if (str.length() 0) {// 移除StringBuffer中的最后一个字符str.deleteCharAt(str.length() - 1);}// 如果StringBuffer为空则星号无效直接忽略}}// 将StringBuffer转换为字符串并返回return str.toString();}
}