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

算法题--替换空格

时间:2022-11-02 23:31:47浏览次数:48  
标签:-- 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://blog.51cto.com/u_11633329/5818462

相关文章

  • C语言学习之写出四位数的各位的数值
    以下为今天学习到的程序的的部分函数解释。(过程参考了本平台博客好友“碟”的《C语言学习记录2(分别计算一个三位数的各位)》的程序)#include<stdio.h>     //此为声......
  • 软考系统架构师倒计时第3天
    软考系统架构师倒计时第3天2019年系统架构师考试科目三:论文一1.论负载均衡技术在Web系统中的应用负载均衡技术是提升Web系统性能的重要方法。利用负载均衡技术,可将负载(......
  • 《SRE实战手册》学习笔记之切入SRE
    转载:https://www.cnblogs.com/imyalost/p/15891000.html这篇文章是《SRE实战手册》学习笔记的第二篇,理解SRE之后,就要找到切入点来落地。 理解SRE中的指标和目标SRE强......
  • Demo56_关于多态_较复杂
    输出类的代码如下packagecom.oop.DuoTai_5;publicclassApplication{publicstaticvoidmain(String[]args){//方法的输出与右侧关系不大,左侧......
  • 将Matlab中的矩阵写入txt文件的方法
    将Matlab中的矩阵写入txt文件的方法文件操作是一种重要的输入输出方式,即从数据文件读取数据或将结果写入数据文件。MATLAB提供了一系列低层输入输出函数,专门用于文件操作......
  • Linux c 开发-29 mosquitto库保持连接的两种方式
    方式1while(1){intrc=mosquitto_loop(mosq,-1,1);if(rc){printf("mqtt_portal:mosquitto_looprc=%d\n",rc);......
  • selenium-执行JS代码
    importtimefromwebdriver_helperimportwebdriver,get_webdriverfromselenium.webdriverimportchromefromselenium.webdriver.common.byimportBydriver=......
  • Binder学习笔记-2——binder优先级传递
    基于Linux-5.10,有补充Linux-5.15的说明一、优先级相关结构体和成员1.structbinder_prioritystructbinder_priority{//binder_internal.hunsignedintsched_......
  • Java GUI编程(未完待续...)
    JavaGUIAWT1.组件和容器Frame弹出一个窗口packageuichuan;importjava.awt.*;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;pu......
  • 实验7:基于REST API的SDN北向应用实践
    实验7:基于RESTAPI的SDN北向应用实践一、实验目的能够编写程序调用OpenDaylightRESTAPI实现特定网络功能;能够编写程序调用RyuRESTAPI实现特定网络功能。二、实验......