题目来源

本题来源为:

题目描述

给你一个字符串 s 。

你的任务是重复以下操作删除 所有 数字字符:

删除 第一个数字字符 以及它左边 最近 的 非数字 字符。
请你返回删除所有数字字符以后剩下的字符串。
[每日一题]3174. 清除数字-LMLPHP

算法原理

方法一:栈

根据题意,我们可以使用栈来模拟所有操作。首先遍历字符串 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
[每日一题]3174. 清除数字-LMLPHP

方法二:递归

[每日一题]3174. 清除数字-LMLPHP

代码实现

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;
    }
};
09-05 17:47