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

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.lryc.cn/news/492137.html

相关文章:

  • C++ 优先算法 —— 无重复字符的最长子串(滑动窗口)
  • ADS学习笔记 6. 射频发射机设计
  • 上海乐鑫科技一级代理商飞睿科技,ESP32-C61高性价比WiFi6芯片高性能、大容量
  • QT QRadioButton控件 全面详解
  • 51单片机从入门到精通:理论与实践指南(一)
  • 零基础3分钟快速掌握 ——Linux【终端操作】及【常用指令】Ubuntu
  • C#中面试的常见问题007
  • 人工智能——大语言模型
  • nodejs第三方库sharp对图片的操作生成新图片、压缩、添加文字水印及图片水印等
  • 力扣第 67 题 “二进制求和”
  • Spring Boot优雅读取配置信息 @EnableConfigurationProperties
  • 鸿蒙多线程开发——Sendable对象的序列化与冻结操作
  • nodepad配置c/c++ cmd快速打开创建项目文件
  • 【C++】读取数量不定的输入数据
  • ESC字符背后的故事(27 <> 033 | x1B ?)
  • 基于NXP LS1043 OpenWRT智能交通边缘网关设计
  • 绪论相关题目
  • 中国科学院大学研究生学术英语读写教程 Unit7 Materials Science TextA 原文和翻译
  • centos系列安装服务器时分区
  • vue的理解
  • 111. UE5 GAS RPG 实现角色技能和场景状态保存到存档
  • 抖音短视频矩阵源代码部署搭建流程
  • leetcode - LRU缓存
  • 计算机网络八股整理(一)
  • 了解 CSS position 属性
  • 数据结构 【二叉树(上)】
  • C++11(中)
  • 下拉选择器,选择框,支持单选、多选、筛选和清空功能,支持vue2和vue3
  • HTTP中GET和POST的区别是什么?
  • day04 企业级Linux安装及远程连接知识实践