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;      }    }  }};

小弟才浅,如果本篇文章有任何谬误和倡议,欢送大家留言

感激大家的点赞、珍藏

微信搜「三年游戏人」第一工夫浏览最新内容,获取一份收集多年的书籍包 以及 优质工作内推