首页 > 其他分享 >字符串原地修改双指针经典实现

字符串原地修改双指针经典实现

时间:2023-05-25 11:25:54浏览次数:51  
标签:string scan ++ chars 原地 write while 字符串 指针

字符串原地修改经常遇到的一类题,双指针一个用于写入,一个用于扫描,互不干扰,各司其职。

题目:https://leetcode.cn/problems/reverse-words-in-a-string/

    string reverseWords(string s) {
        reverse(s.begin(), s.end());
        int write = 0, scan = 0;
        while (scan <= s.size()) {
            if (scan == s.size() || s[scan] == ' ') {
                // 屏蔽开头是空格情况
                if (write == 0) {
                    scan++;
                    continue;
                }
                // 反转单词
                int w = write - 1;
                while (w >= 0 && s[w] != ' ') w--;
                reverse(s.begin() + w + 1, s.begin() + write);
                // scan后面没有有效单词退出
                while (scan < s.size() && s[scan] == ' ') scan++;
                if (scan == s.size()) break;
                // 单词之间补充空格
                s[write++] = ' ';
            } else {
                s[write++] = s[scan++];
            }
        }
        return s.substr(0, write);
    }

题目:https://leetcode.cn/problems/string-compression/

    int compress(vector<char>& chars) {
        int write = 0, i = 0;
        while (i < chars.size()) {
            if (i + 1 < chars.size() && chars[i] == chars[i + 1]) {
                chars[write++] = chars[i++];
                int count = 2;
                while (i + 1 < chars.size() && chars[i] == chars[i + 1]) {
                    i++;
                    count++;
                }
                i++;
                stack<char> s;
                while (count) {
                    s.push('0' + count % 10);
                    count /= 10;    
                }
                while (!s.empty()) {
                    chars[write++] = s.top();
                    s.pop();
                }
            } else {
                chars[write++] = chars[i++];
            }
        }
        return write;
    }

题目:https://leetcode.cn/problems/removing-stars-from-a-string/

    string removeStars(string s) {
        int write = 0, scan = 0;
        while (scan < s.size()) {
            if (s[scan] == '*') {
                write--;
                scan++;
                continue;
            }
            s[write++] = s[scan++];
        }
        return s.substr(0, write);
    }

标签:string,scan,++,chars,原地,write,while,字符串,指针
From: https://www.cnblogs.com/linukey/p/17430599.html

相关文章

  • java 通过String关键词 和 String对象创建字符串 耗时对比
    importjava.util.ArrayList;importjava.util.Vector;publicclassImoocStudent{publicstaticvoidmain(Stringargs[]){longstartTime=System.currentTimeMillis();for(inti=0;i<5000000;i++){Strings1="he......
  • C++中const和constexpr关键字解析:常量、函数和指针
    C++中const和constexpr的作用很多C++的初学者看到const这个关键字的第一反应都是一头雾水,主要是因为const可以出现在很多的位置,以及后面加入的constexpr更是常常感到困惑,今天就为大家一一解释出现它们的含义和以及作用const关键字const修饰变量这是最基本的一种用法,顾名思义,就是......
  • 代码随想录Day8|字符串
    主要是学了java的字符串用法,题目不是很难使用StringBuilder类型可以节省时间,关于这个类型的添加和使用chartemp=sb.charAt(start);sb.setCharAt(start,sb.charAt(end));sb.setCharAt(end,temp);151.翻转字符串里的单词 https://leetcode.cn/problems/reverse-words......
  • php中日期时间字符串可以直接比较大小
    php中的日期时间字符串可以直接比较大小很多朋友还不知道,一直使用strtotime转换字符串为时间戳再比较大小。$time1='09:00';$time2='12:51';$time3='22:00';self::assertTrue($time2>$time1);self::assertTrue($time2<$time3);$date1='2021-02-03';$......
  • 特殊哈希表-原地哈希
    例题一链接:41.缺失的第一个正数题解一种简单的方法是利用map,但是空间复杂度不符合条件;另一种简单的方法是直接排序,但是时间复杂度不符合条件。于是我们结合两者,提出一种算法,姑且称之为·原地哈希·。该算法是基于比较的排序,不需要额外的空间:给定长度为N的数组,我们想将其变换为......
  • 字典拼接、字典字符串转字典 、列表字符串转列表
    字典拼接要拼接字典,可以使用Python的update()方法。这个方法会将一个字典的键值对添加到另一个字典中。示例代码如下:dict1={'a':1,'b':2}dict2={'c':3,'d':4}dict1.update(dict2)print(dict1)#输出结果为:{'a':1,'b':2,'c':......
  • 【算法学习前置】了解js中的字符串
    二、字符串常用方法chat()返回指定索引位置处的字符。类似于数组用中括号获取相应下标位置的数据。conststr='abcdef'console.log(str.chat(2))//'c'console.log(srt[2])//'c'concat()类似数组的concat(),用来返回一个合并拼接两个或两个以上字符串。原字符串不......
  • 不同路径 II(数组、动态规划)、同构字符串(哈希表、字符串)、颠倒二进制位(位运算、分
    不同路径II(数组、动态规划)一个机器人位于一个_mxn_网格的左上角(起始点在下图中标记为“Start”)。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网......
  • python 清除字符串中的 emoji 表情
    https://pypi.org/project/emoji/pipinstallemoji复制字符串中间有emoji表情,替换掉。text="......
  • 2023-05-23:如果交换字符串 X 中的两个不同位置的字母,使得它和字符串 Y 相等, 那么称 X
    2023-05-23:如果交换字符串X中的两个不同位置的字母,使得它和字符串Y相等,那么称X和Y两个字符串相似。如果这两个字符串本身是相等的,那它们也是相似的。例如,"tars"和"rats"是相似的(交换0与2的位置);"rats"和"arts"也是相似的,但是"star"不与"tars","rats",或&quo......