博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试题4-替换空格
阅读量:5905 次
发布时间:2019-06-19

本文共 1202 字,大约阅读时间需要 4 分钟。

合并两个数组或者字符串,如果从前往后赋值每个元素,则需要重复移动数字多次,此时可以换着考虑从后往前,可以减少移动次数,从而提高效率

 
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Fri Feb 24 09:53:42 2017
  4. @author: zzpp220
  5. """
  6. class ReplaceSpace:
  7.    def rePlace1(self,s):
  8.        if not s or not isinstance(s,str):
  9.            return None
  10.        s=s.replace(' ','%20')
  11.        return s
  12.        
  13.    def rePlace2(self,s):
  14.        if not s or not isinstance(s,str):##isinstance判断s是不是字符型
  15.            return None
  16.        ##遍历出空格的总数
  17.        countSpace=0
  18.        for char in s:
  19.            countSpace+=1 if char==' ' else 0
  20.        #先新建一个具有空格替换后总长的数组
  21.        newstr=(len(s)+countSpace*2)*[None]
  22.        p1,p2=len(s)-1,len(newstr)-1
  23.        #从后往前遍历,令p1,p2分别为原字符串和替换后字符串的末尾位置,如果p1,p2在长度范围内,并且二者不相等
  24.        while p1*p2>=0 and p1!=p2:
  25.            #不是空格,则将p1指向的元素依次copy给p2,然后都减1,
  26.            if s[p1]!=' ':
  27.                newstr[p2]=s[p1]
  28.                p1-=1
  29.                p2-=1
  30.            #遇到空格,则先让p1指向下一个元素,从现在的p2在内开始往前3个分别赋值为%,2,0,完成后让p2从当前位置跳到%之前的位置
  31.            else:
  32.                p1-=1
  33.                newstr[p2-2:p2+1]=['%','2','0']
  34.                p2-=3
  35.        #循环跳出后,如果p1==p2,则说明,给替换的字符串预留的地方都用完了,即原字符串从后往前的空格都遍历完了,将从头开始到现在的值都原样赋值到新字符串相应的位置
  36.        if 0<=p1 and 0<=p2 and p1==p2:
  37.            newstr[:p2+1]=s[:p1+1]
  38.        ##将列表内的字符元素转化为字符串类型
  39.        return ''.join(newstr)
  40.        
  41. if __name__=='__main__':
  42.    a=None#3,'we are happy.'' we are happy. ''we are   happy.''wearehappy.'
  43.    solution=ReplaceSpace()
  44.    print solution.rePlace1(a)
  45.    print solution.rePlace2(a)
  46.        

附件列表

 

转载于:https://www.cnblogs.com/zzxx-myblog/p/6481235.html

你可能感兴趣的文章
8 -- 深入使用Spring -- 8... Spring整合Hibernate
查看>>
lucene 索引文件大小分布_tim
查看>>
自我分析-Spring IOC
查看>>
实例教程Unity3D单例模式(二)自我包括法
查看>>
最短网络Agri-Net
查看>>
分分钟弄明白UML中泛化 , 实现 , 关联, 聚合, 组合, 依赖
查看>>
线程与信号,线程与锁
查看>>
linux(二十一):apache服务配置(二)
查看>>
Java笔记19:Java匿名内部类
查看>>
爱留图 - 一个定期开设专栏活动的图片收集网站诞生。
查看>>
UEFI BIOS Rootkit Analysis
查看>>
cocos2d-x 3.0 Android环境搭建(亲測通过)
查看>>
MySQL之慢查询-删除慢查询日志
查看>>
CharacterController平滑移动到某点
查看>>
mui 页面跳转
查看>>
sizeof、strlen
查看>>
go语言time包的学习(Time,Location,Duration,Timer,Ticker)
查看>>
拓扑排序((算法竞赛入门经典)刘汝佳)
查看>>
#leetcode#One Edit Distance
查看>>
Deep Learning Toolboxs
查看>>