题目来源
本题来源为:
题目描述
给你一个字符串 s 。
你的任务是重复以下操作删除 所有 数字字符:
删除 第一个数字字符 以及它左边 最近 的 非数字 字符。
请你返回删除所有数字字符以后剩下的字符串。
算法原理
方法一:栈
根据题意,我们可以使用栈来模拟所有操作。首先遍历字符串 s,令当前访问的字符为 c,有两种情况:
-
c 为数字,那么我们将栈顶字符弹出。
-
c 不为数字,那么我们将 c 压入栈中。
最后返回栈中自底向上的所有字符组成的字符串为结果。
代码实现
class Solution
{
public:
string clearDigits(string s)
{
string res;
for(char c:s)
{
if(isdigit(c))
{
//出栈
res.pop_back();
}
else
{
//入栈
res.push_back(c);
}
}
return res;
}
};
其中isdigit是一个函数,他的功能如下:
检查 c 是否为十进制字符。
十进制数字是以下任意数字: 0 1 2 3 4 5 6 7 8 9
方法二:递归
代码实现
class Solution
{
public:
string clearDigits(string s)
{
//递归
int n=s.size();
for(int i=0;i<n;i++)
{
int d=s[i]-'0';
if(d>=0&&d<=9)
{
s.erase(s.begin()+i-1,s.begin()+i+1);
return clearDigits(s);
}
}
//递归出口
return s;
}
};