zoukankan      html  css  js  c++  java
  • 面试题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.        



    附件列表

    • 相关阅读:
      JAVA内存结构解析
      Android(IPC)进程间通讯1:详解Binder由来?
      Python-快速排序算法
      扫描二维码、条形码,生成二维码
      ios常用方法
      UITableView定义等高的cell
      UITableView总结
      Swift——常量&变量
      iOS平台Cordova插件的开发方法
      自定义iWatch App点击Glance后的跳转页
    • 原文地址:https://www.cnblogs.com/zzxx-myblog/p/6481235.html
    Copyright © 2011-2022 走看看