首页 > 编程语言 >算法题--替换空格

算法题--替换空格

时间:2022-11-02 23:11:14浏览次数:67  
标签:-- endIndexOfOriStr endIndexOfNewStr 空格 算法 str 字符串

4

要求

时间限制:1秒 空间限制:32768K

题目描述

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy.

解题思路

拿到题目之后,一般会首先想到从头开始扫描这个字符串,遇到空格就将后面所有的字符都向后移动两格,再插入%20。虽然这个办法可行,但是时间复杂度为O(n^2),每一个字符都会有多次移动

现在希望每个字符只移动一次。我们要用两个指针P1和P2,P1指向字符串的最后一个字符'\0',P2指向替换了空格后的字符串尾部。每一个空格都会导致字符串增长两个字符

具体过程如下图所示

代码

class Solution
{
public:
  void replaceSpace(char *str,int length)
  {
    if(str==NULL || length<=0)
      return;
    
    int endIndexOfOriStr = -1;
    int endIndexOfNewStr = -1;
    int curIndexOfOriStr = -1;
    do
    {
      ++curIndexOfOriStr;
      
      ++endIndexOfOriStr;
      ++endIndexOfNewStr;
      if(str[curIndexOfOriStr] == ' ')
        endIndexOfNewStr += 2;
        
    }while(str[curIndexOfOriStr] != '\0');
    
    if(endIndexOfNewStr>=length)
      return;
        
    while(endIndexOfOriStr >= 0 && endIndexOfOriStr < endIndexOfNewStr)
    {
      if(str[endIndexOfOriStr]==' ')
      {
        --endIndexOfOriStr;
        str[endIndexOfNewStr--] = '0';
        str[endIndexOfNewStr--] = '2';
        str[endIndexOfNewStr--] = '%';
      }
      else
      {
        str[endIndexOfNewStr] = str[endIndexOfOriStr];
        --endIndexOfOriStr;
        --endIndexOfNewStr;
      }
    }
  }
};

由于还要搬砖,没有办法一一回复私信把学习资料发给大家。我直接整理出来放在下面,觉得有帮助的话可以下载下来用于学习
链接:https://pan.baidu.com/s/1C-9TE9ES9xrySqW7PfpjyQ 提取码:cqmd

感谢各位人才的点赞收藏关注

微信搜「三年游戏人」收获一枚有情怀的游戏人,第一时间阅读最新内容,获取优质工作内推

标签:--,endIndexOfOriStr,endIndexOfNewStr,空格,算法,str,字符串
From: https://www.cnblogs.com/gamemanthree/p/16852897.html

相关文章

  • 006kubectl实用参数总结
    一、打印先前退出容器#-p,--previous=false:Iftrue,printthelogsforthepreviousinstanceofthecontainerinapodifitexists.#-p参数应用场景为-->......
  • PostgreSQL查询引擎——create table xxx(...)基础建表流程
    CREATETABLEtable_name([{column_namedata_type[COLLATEcollation][column_constraint[...]]}[,...]])wherecolumn_constraintis:[CONSTRAINTco......
  • tsf定时任务迁移到xxl-job
    tsf定时任务迁移到xxl-job​​1.介绍​​​​2.原理​​​​2.1设计思想​​​​2.2系统组成​​​​2.3架构图​​​​3.迁移方案​​​​3.1现状​​​​3.2迁移......
  • FastDFS收藏起来,现在开始用Minio吧
    MinIo分布式文件存储一、Minio介绍MinIO是全球领先的对象存储先锋,目前在全世界有数百万的用户。高性能,在标准硬件上,读/写速度上高达183GB/秒和171GB/秒,拥有更高的吞吐量和......
  • 工作流Flowable和Camunda的学习之路
    工作流详细介绍一、Flowable介绍1.B站分享  在B站分享了Flowable的​​基础篇​​​和​​高级篇​​,包括了Flowable的入门和基础操作。可以帮助大家对Flowable有个清晰的......
  • python 协程
    python协程文章目录​​python协程​​​​1.协程​​1.协程协程(coroutine),又称微线程,是一种用户级的轻量级线程。协程拥有自己的寄存器上下文和栈。协程调度切换时,将......
  • 客快物流大数据项目(八十一): Kudu原理
    文章目录​​Kudu原理​​​​一、表与schema​​​​二、kudu的底层数据模型​​Kudu原理一、表与schemaKudu设计是面向结构化存储的,因此Kudu的表需要用户在建表时定义它的......
  • 协程的简单操作,你都知道哪些?Golang如何实现协程交替打印?
    博主介绍:–我是了凡微信公众号【​​了凡银河系​​】期待你的关注。未来大家一起加油啊~前言对于并发的概念,我们都清楚为了合理利用CPU的执行效率,我们选择当一个事务或......
  • Proxmox VE 近期有ARM 版本发布么?
    User-31October202214:49BecauseIpublishedanewbook"ProxmoxVEHyperconvergedClusterPracticeTrueBiography",ithasacertaininfluenceonChinesema......
  • day11.0
    finalfinal是一个关键字。final修饰的变量,只能赋值一次。final修饰的方法无法被覆盖。final修饰的类无法被继承。final修饰的实例变量必须手动赋值,不能赋默认值。f......