1、题目
给你一个字符串 s 。
你的任务是重复以下操作删除 所有 数字字符:
删除 第一个数字字符 以及它左边 最近 的 非数字 字符。
请你返回删除所有数字字符以后剩下的字符串。
示例 1:
输入:s = “abc”
输出:“abc”
解释:
字符串中没有数字。
示例 2:
输入:s = “cb34”
输出:“”
解释:
一开始,我们对 s[2] 执行操作,s 变为 “c4” 。
然后对 s[1] 执行操作,s 变为 “” 。
提示:
1 <= s.length <= 100
s 只包含小写英文字母和数字字符。
输入保证所有数字都可以按以上操作被删除。
2、解
解题思路:运用出栈、进栈思想遍历字符串。遇到小写字母进栈,遇到数字则将进栈的小写字母出栈。
string clearDigits(string s)
{
string result;
for(int i = 0; i < s.length(); i++){
if('0' <= s[i] && s[i]<= '9'){
result.pop_back();
}else{
result.push_back(s[i]);
}
}
return result;
}
进阶小技巧:上述代码执行时间可以优化,将进栈操作利用字符串可以直接相加的特点result += s[i];
string clearDigits(string s)
{
string result;
for(int i = 0; i < s.length(); i++){
if('0' <= s[i] && s[i]<= '9'){
result.pop_back();
}else{
//result.push_back(s[i]);
result += s[i];
}
}
return result;
}