当前位置: 首页 > article >正文

3174、清除数字

3174、[简单] 清除数字

1、题目描述

给你一个字符串 s 。你的任务是重复以下操作删除 所有 数字字符:

  • 删除 第一个数字字符 以及它左边 最近非数字 字符。

请你返回删除所有数字字符以后剩下的字符串。

2、解题思路

  1. 遍历字符串

    • 我们需要逐个遍历字符串中的每个字符,找到数字字符,并删除其左侧最近的非数字字符。
  2. 双指针法

    • 我们可以使用两个指针 left 和 right 来实现遍历和删除的过程:
      • right 用于遍历字符串 s
      • left 用于构造删除后的新字符串,逐步替换字符。
  3. 处理逻辑

    • 当我们遇到一个数字字符时,删除左侧最近的非数字字符,这可以通过将 left 指针左移一位实现。

    • 当遇到非数字字符时,将其放到新的位置上,并移动 left 指针。

  4. 最后清理字符串

    • 遍历结束后,使用 erase 函数删除字符串中多余的字符,最终得到所需结果。

3、代码实现

class Solution {
public:
    string clearDigits(string s) {
        int n = s.size(); // 获取字符串的长度
        // 定义两个指针, left 用于构造新字符串, right用于遍历原字符串
        int left = 0, right = 0;

        // 使用双指针法遍历字符串
        while (right < n) {
            // 如果当前字符是数字
            if (s[right] >= '0' && s[right] <= '9') {
                // 如果 left 不为 0,表示有可以删除的非数字字符
                if (left != 0) {
                    // 删除数字左侧最近的非数字字符
                    left--;
                }
            } else {
                // 如果当前字符是非数字字符,将其放到新位置上
                s[left++] = s[right];
            }
            right++; // 移动右指针
        }

        // 删除从 left 开始的多余字符
        s.erase(left);

        // 返回处理后的字符串
        return s;
    }
};

4、复杂度分析

  • 时间复杂度:O(n),其中 n 是字符串的长度。我们只遍历字符串一次。

  • 空间复杂度:O(1),只使用了常数级别的额外空间来存储指针。

5、总结

这个问题通过双指针法实现对字符串的遍历和处理,核心在于如何高效地删除数字字符及其左侧相邻的非数字字符。通过对指针的巧妙控制,我们能够在一次遍历中完成所有操作,并且不需要额外的空间复杂度。


http://www.kler.cn/a/411357.html

相关文章:

  • C语言数据结构-链表
  • 【自动化Selenium】Python 网页自动化测试脚本(上)
  • ArcGIS pro中的回归分析浅析(加更)关于广义线性回归工具的补充内容
  • XG(S)-PON原理
  • 基于预测反馈的情感分析情境学习
  • 自制Windows系统(十)
  • 01 [51单片机 PROTEUS仿真设计]基于温度传感器的恒温控制系统
  • 计算机网络 第4章 网络层
  • 【自动化Selenium】Python 网页自动化测试脚本(上)
  • 机器视觉Halcon技术文档:一次难忘的Bug经历与启示
  • leetcode - LRU缓存
  • Python数据分析实例五、US 大选捐款数据分析
  • 【数据分析】基于GEE解析2000-2020年武汉市FVC时空变化特征
  • Jenkins-Ansible 插件相关用法
  • ReentrantLock(可重入锁) Semaphore(信号量) CountDownLatch
  • Windows下安装FreeSurfer教程
  • Linux进程信号保存/操作系统运行原理
  • 【第三讲】Spring Boot 3.4.0 新特性详解:增强的配置属性支持
  • 无人机:智能航点规划技术!
  • jQuery-Json-AJAX-跨域
  • 【前端】javaScript
  • Excel与PPT:职场两大软件的应用比拼
  • 调用 AWS Lambda 时如何传送字节数组
  • 关于IDE的相关知识之三【插件安装、配置及推荐的意义】
  • Python语法基础(一)
  • 【C++】C++的nullptr和NULL