给你一个字符串 s
。
你的任务是重复以下操作删除 所有 数字字符:
- 删除 第一个数字字符 以及它左边 最近 的 非数字 字符。
请你返回删除所有数字字符以后剩下的字符串。
示例 1:
输入:s = "abc"
输出:"abc"
解释:
字符串中没有数字。
示例 2:
输入:s = "cb34"
输出:""
解释:
一开始,我们对 s[2]
执行操作,s
变为 "c4"
。
然后对 s[1]
执行操作,s
变为 ""
。
提示:
1 <= s.length <= 100
s
只包含小写英文字母和数字字符。- 输入保证所有数字都可以按以上操作被删除。
一眼栈,关键在于利用栈的思路
class Solution {
public:
string clearDigits(string s) {
stack<char> st;
for(int i=0;i<s.length();i++){
if(s[i]<='z'&&s[i]>='a'){
st.push(s[i]);
}
else if(s[i]<='9'&&s[i]>='0'){
if(!st.empty()){
st.pop();
}
}
}
string k;
while(!st.empty()){
k+=st.top();
st.pop();
}
reverse(k.begin(), k.end());
return k;
}
};
直接用栈,最后需要进行一个reverse
class Solution {
public:
string clearDigits(string s) {
string res="";
for(auto &ch:s)
{
if(ch>='0'&&ch<='9') res.pop_back();
else res.push_back(ch);
}
return res;
}
};
----------------------------------------------------
//string a="123";
//1.在字符串末尾添加一个字符
//a.push_back('3'); //结果为 a="1233";
//2.在字符串末尾删除一个字符
//a.pop_back(); //结果为 a="12";
----------------------------------------------------
直接对string字符串pop_back()、push_back(),从而避免从真实栈中读数据需要reverse的情况