题目描述:

  • 实现一个函数,把字符串中的每一个空格替换为“%20”。
  • 例如,输入“we are happy.” ,则输入“we%20are%20happy.”

题目分析:

对题目的分析:

  • 题目初始分析,首先想到将初始的一个空格字符,替换之后变成‘%’、‘2’、‘0’ 3个字符,故字符串整体是变长的
  • 如果在原始字符串上替换的话,就有可能修改字符串后面的字符内存
  • 如果是创建一个新的字符串,我们就可以申请足够的内存来进行替换
  • 若是面试官要求我们在初始字符串上去修改的话,我们有一下的思路

一些想法:

  • 最直观的做法就是,从头到尾扫描一遍,每次碰到一个空格,就去替换,
  • 但由于是将一个字符替换为3个字符,所以空格后面的字符串要全部后移2位
  • 即就是有几个空格,我们就要将其后面的字符后移几次。
  • 假设字符串的长度是n,对每一个空格字符串,需要移动后面的 O(n) 个字符,若是含有 O(n) 个空格,则 时间复杂度是 O(n^2)
  • 显然这样不是最好的做法。

详细思路:

  • 我们先遍历整个字符串,统计字符串中的空格的个数,由此可以计算最后新的字符串的长度。
  • 每次替换一个空格,长度增加2,所以 新字符串的长度等于初始长度加上2乘以空格个数
  • 我们从字符串的后面开始赋值和替换。指定两个指针ij,i指向初始字符串的末尾,j指向新的字符串的末尾。
  • 依次将i指针指向的元素复制给j指针对应的元素,直至指针i遇到空格
  • 把指针i左移,指针j对应的元素替换为“%20”’,再把指针j左移3位。
  • 如此重复直至遍历所有的字符串。

代码实现:

class Solution:def replaceblank(self,char):if char == None or len(char) <= 0:   # 排序无效字符串和空字符串return Falsecount = 0            # 计数变量for i in range(len(char)):   # 遍历,统计空格个数if char[i] == ' ':count += 1char_new = char + ' '*2*count    # 新的字符串i = len(char)-1        # 初始字符串的尾指针j = len(char_new) -1    # 新字符串的尾指针char_new = list(char_new)   # 由于字符串不能执行赋值操作,转为listwhile i >= 0:if char_new[i] != ' ':        # 指针 i 未指向空格时,将 i 的值赋值给 jchar_new[j] = char_new[i]i -= 1j -= 1else:              # 指针 i 指向空格时: i-1 ,给 [j-2:j+1]赋值‘%20’,并左移三位i -= 1char_new[j-2:j+1] = '%20'j -= 3return ''.join(char_new)    # 再转化为字符串if __name__ == '__main__':# 验证:# 输入字符串包含空格(空格在最右边;在最左边;在中间;有连续多个)test_1 = 'wearehappy 'test_2 = ' wearehappy'test_3 = 'we are happy'test_4 = 'we    are happy'# 输入字符串中没有一个空格test_5 = 'wearehappy'# 特殊输入测试(无效的字符串;空字符串;字符串只有一个空格;字符串中有连续空格)test_6 = Nonetest_7 = ''test_8 = ' 'test_9 = '    'solution = Solution()print("test_1:", solution.replaceblank(test_1))print("test_2:", solution.replaceblank(test_2))print("test_3:", solution.replaceblank(test_3))print("test_4:", solution.replaceblank(test_4))print("test_5:", solution.replaceblank(test_5))print("test_6:", solution.replaceblank(test_6))print("test_7:", solution.replaceblank(test_7))print("test_8:", solution.replaceblank(test_8))print("test_9:", solution.replaceblank(test_9))

验证结果:

test_1: wearehappy%20
test_2: %20wearehappy
test_3: we%20are%20happy
test_4: we%20%20%20%20are%20happy
test_5: wearehappy
test_6: False
test_7: False
test_8: %20
test_9: %20%20%20%20

复杂度分析:

时间复杂度:

上述代码空格替换为%20可以忽略不计,主要的花费在遍历字符串中。,因此时间复杂度是 O(n)

空间复杂度:O(1)

剑指_5替换空格(Python)相关推荐

  1. 备战sp23春招 day8 | 344.反转字符串 541. 反转字符串II 剑指 05.替换空格 151.翻转字符串里的单词 剑指58-II.左旋转字符串

    344 反转字符串 class Solution {public:void reverseString(vector<char>& s) {int n = s.size();int ...

  2. python剑指offer替换空格_《剑指offer》2-替换空格【Java+Python】

    替换空格 1. 题目描述 请实现一个函数,将一个字符串中的空格替换成"%20". 2. 示例 例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%2 ...

  3. 剑指Offer 替换空格

    题目描述 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 思路: 替换空 ...

  4. [剑指Offer]替换空格

    今天看题的时候,遇到一个替换空格的题目,分析一下哈. 题目要求:把字符串中的每个空格替换成"%20".例如输入"we are happy",则输出"w ...

  5. python剑指offer替换空格_02_替换空格【python】

    1.题目描述 请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 2.思 ...

  6. python剑指offer替换空格_迷人的算法-剑指offer面试题5:替换空格

    题目:请实现一个函数,把字符串中的每个空格替换成"%20". 例如,输入"We are happy.",则输出"We%20are%20happy.&q ...

  7. python剑指offer替换空格_《剑指Offer》字符串 替换空格

    //str.replace(char oldChar,char newChar);用字符newChar替换oldChar;返回一个新的字符串 public class Solution { publi ...

  8. 剑指offer-3(替换空格)

    题目: 实现一个方法,把一个字符数组里面的空格全部替换为"20%". 思路: 首先呢,要先获取字符数组中有多少个空格以及字符数组中字符的长度,计算出替换后的长度:然后,让一个虚拟指 ...

  9. [剑指offer] 替换空格

    题目描述 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 刚开始用rep ...

  10. 剑指offer--2.替换空格

    题目: 请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 思路:可以使 ...

最新文章

  1. Py之matplotlib.pyplot:matplotlib.pyplot的plt.legend函数的简介、使用方法之详细攻略
  2. android下拉弹性gif,android-pulltorefresh 下拉加载中使用gif动图
  3. bootstrap php 多行,使用PHP循环将Bootstrap行和正确的列号添加到元素
  4. How Tomcat Works(十三)
  5. jQuery Validate 表单验证插件----在class属性中添加校验规则进行简单的校验
  6. 【MS SQL】通过执行计划来分析SQL性能
  7. QGIS 3. 使用qgis制作三维浮雕地图
  8. android心率曲线绘制,巧妙绘制心率曲线图的方法实践
  9. xpath helper用法
  10. [数据可视化] 折线图(Line Chart)
  11. 笔记本计算机硬盘如何分盘,笔记本分盘,小编教你笔记本硬盘如何分区
  12. 蜂鸟E200(3)乱序、反压、流水线冲突
  13. 思维为何会越来越原地踏步No.209
  14. 华为服务器批量系统软件,华为云ECS批量管理工具
  15. Flutter强制某个页面横屏
  16. libpng warning: iCCP: known incorrect sRGB profile 警告解决
  17. Android 耳机检测原理介绍
  18. 春节送礼经济学:绕不开的礼尚往来,怎么送礼最有效?
  19. 模仿项目 生成随机的测验试卷文件
  20. 猫眼api html,Requests库+正则爬取猫眼电影Top100

热门文章

  1. 黑石集团(Black Stone)黑岩公司(Black Rock)
  2. Python 命令行库的大乱斗 | 凌云时刻
  3. 图像下采样 matlab_MATLAB--数字图像处理 图像的采样与量化
  4. 【MDVRP】基于matlab遗传算法求解多仓库车辆路径规划问题【含Matlab源码 1481期】
  5. 【图像提取】基于matlab形态学矩阵块+线段提取【含Matlab源码 1014期】
  6. 【优化算法】蝗虫优化算法(GOA)【含Matlab源码 936期】
  7. python 水位_python opencv之分水岭算法示例
  8. 文献管理:文献管理软件Mendeley的基本使用和导出参考文献方法
  9. Python删除文件中含有特定值的行
  10. excel方格子插件_转载 | 18个Word/Excel/PPT插件整理