题目链接
题目描述
给你一个字符串 s 。
你的任务是重复以下操作删除 所有 数字字符:
删除 第一个数字字符 以及它左边 最近 的 非数字 字符。
请你返回删除所有数字字符以后剩下的字符串。
示例 1:
输入:s = “abc”
输出:“abc”
解释:
字符串中没有数字。
示例 2:
输入:s = “cb34”
输出:“”
解释:
一开始,我们对 s[2] 执行操作,s 变为 “c4” 。
然后对 s[1] 执行操作,s 变为 “” 。
提示:
1 <= s.length <= 100
s 只包含小写英文字母和数字字符。
输入保证所有数字都可以按以上操作被删除。
求解思路
栈模拟
- 依次遍历字符串,如果遇到字母就直接入栈,如果遇到数字,则将栈顶的元素出栈。
- 需要注意:最后将栈中的字符取出后需要倒序处理一下。
- 使用
StringBuilder
进行字符串的拼接处理可以加快运算速度。
实现代码
class Solution {
public String clearDigits(String s) {
Stack<Character> stack = new Stack();
StringBuilder str = new StringBuilder("");
StringBuilder ans = new StringBuilder("");
for (int i = 0; i < s.length(); i ++) {
if (s.charAt(i) >= 'a' && s.charAt(i) <= 'z') {
stack.push(s.charAt(i));
} else {
stack.pop();
}
}
while (!stack.isEmpty()) {
str.append(stack.peek());
stack.pop();
}
for (int i = str.length() - 1; i >= 0; i --) {
ans.append(str.charAt(i));
}
return ans.toString();
}
}