《剑指offer》-[第2章:面试需要的基础知识 - 2.3:数据结构 - 2.3.2:字符串] 题3:替换空格

本文介绍了一种将字符串中的空格转换为%20的算法,这是网络编程中处理URL特殊字符的重要方法。文章详细解释了两种实现思路,一种是O(n^2)的简单替换法,另一种是O(n)的双指针法,后者更高效。

1、问题描述

实现一个函数将一个字符串中的空格转换成"%20",比如,输入的字符串是"we are happy",替换后的结果为"we%20are%20happy"。

2、解题思路

  • 边界条件:(1)输入字符串为空
  • 分析:这道题的背景是,在网络编程中,如果url中含有特殊字符,比如空格、"#“等,服务器将无法识别,而导致无法获得正确的参数值。我们需要对这些字符进行转换,转换的规则是在”%"后面加上特殊字符的acii码的两位16进制表示,由于空格的acii码是32,16进制表示是20,所以转换后的结果是%20。
  • 这道题的目的是将字符串中原来的一个空格字符转换成"%",“2”,"0"三个字符,因此,如果是在原字符串上进行修改,就要求原字符串后面留有足够的空间。
  • 思路1:最简单的方法是从头到尾扫描字符串,每遇到一个空格,就将空格后面的所有字符向后移动 两个字节,然后插入"%",“2”,"0"这三个字符,由于每次替换时都要移动空格后面的所有字符,所以这种方法的时间复杂度为O(n2)O(n^{2})O(n2)
  • 思路2:另一种方法,我们先遍历一遍数组,这样就能统计出字串串中空格的个数b,由于每替换一个空格后字符串的长度增加2,所以替换完所有空格后字符串的长度是原字符串的长度加上2*b;接下来,我们从字符串的后面进行复制和替换,首先准备双指针,一个指针P1指向原字符串的末尾,另一个指针P2指向替换后字符串的末尾,如果P1所指的字符不是空格,则将该字符复制到P2所指向的位置,并把P1、P2同时向前移动一个位置,如果P1所指的字符为空格,则在P2前面的插入"%",“2”,"0"这三个字符,P1向前移动一个位置,P2向前移动3个位置。直到P1直到开头第一个字符结束。这种方法的时间复杂度为O(n)O(n)O(n)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Albert_YuHan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值