个人网站备案 网站服务内容,小说网站怎么做防采集,一键提交各大收录,李佳琦网络营销方式3174、[简单] 清除数字
1、题目描述
给你一个字符串 s 。你的任务是重复以下操作删除 所有 数字字符#xff1a;
删除 第一个数字字符 以及它左边 最近 的 非数字 字符。
请你返回删除所有数字字符以后剩下的字符串。
2、解题思路 遍历字符串#xff1a; 我们需要逐个遍…3174、[简单] 清除数字
1、题目描述
给你一个字符串 s 。你的任务是重复以下操作删除 所有 数字字符
删除 第一个数字字符 以及它左边 最近 的 非数字 字符。
请你返回删除所有数字字符以后剩下的字符串。
2、解题思路 遍历字符串 我们需要逐个遍历字符串中的每个字符找到数字字符并删除其左侧最近的非数字字符。 双指针法 我们可以使用两个指针 left 和 right 来实现遍历和删除的过程 right 用于遍历字符串 sleft 用于构造删除后的新字符串逐步替换字符。 处理逻辑 当我们遇到一个数字字符时删除左侧最近的非数字字符这可以通过将 left 指针左移一位实现。 当遇到非数字字符时将其放到新的位置上并移动 left 指针。 最后清理字符串 遍历结束后使用 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、总结
这个问题通过双指针法实现对字符串的遍历和处理核心在于如何高效地删除数字字符及其左侧相邻的非数字字符。通过对指针的巧妙控制我们能够在一次遍历中完成所有操作并且不需要额外的空间复杂度。