• 面试题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.        



    附件列表

    • 相关阅读:
      3D集合图元:最小边界框/包围盒(boundingbox)
      vs2012下 error4996
      将自己的类封装为lib的方法
      3D特征:关于HFM和HBB
      C++的Matlab接口
      BigDataMini导论
      vs2012编译boost_1_54_0
      RGB_D_开发征程(使用Kinect)
      **PCD数据获取:Kinect+OpenNI+PCL对接(代码)
      PCL:全程详解 VS2010+PCL配置
    • 原文地址:https://www.cnblogs.com/zzxx-myblog/p/6481235.html
    Copyright © 2020-2023  润新知