请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解答思路
此题用python解答最简单的方法是使用字符串中的自带替换方法——replace
还有一种方法则需要将在每次遍历到空格时,在尾部填充两个任意字符,这样需要两个指针P1和P2,令P1指向字符串原本的末尾位置,P2指向字符串现在的末尾位置,P1和P2同时从最后向前遍历,当P1遍历到一个空格时,令P2指向的位置依次填充02%(%20的逆序),若没有遍历到空格就填充上P1指向字符的值,这里选择从后往前遍历是为了 改变P2所指向的内容时,不会影响到P1遍历原来字符串的内容
解题代码1
# -*- coding:utf-8 -*-
class Solution:
# s 源字符串
def replaceSpace(self, s):
# write code here
return s.replace(' ','%20')
解题代码2
class Solution:
def replaceSpace(self,s):
if not isinstance(s,str) or len(s) <= 0 or s == None: #判断是否是字符串类型,或空
return '' #返回空
spaceNum = 0 #初始化空格的数目
for i in s: #遍历字符串
if i == ' ': #若遍历到空格
spaceNum += 1 #空格数加一
newStrLen = len(s)+spaceNum*2 #新字符串长度为原始字符串长度+空格数*2
newStr = newStrLen*[None] #构造长度为newStrLen的空列表
indexOfOriginal,indexOfNew = len(s) - 1,newStrLen - 1 #原始索引下标=原始字符串长度-1,新索引下标=新字符串长度-1
while indexOfNew >= 0 and indexOfOriginal <= indexOfNew: #两个列表同时循环,从后向前遍历
if s[indexOfOriginal] == ' ': #判断原始列表遇到空格时
newStr[indexOfNew-2:indexOfNew + 1] = ['%','2','0'] #在新列表的从后往前依次插入‘0’,‘2’,‘%’
indexOfNew -= 3 #由于插了三个字符,减三
indexOfOriginal -= 1 #往前循环
else: #没有遇到空格则新字符串的相应位置和原始字符串一致
newStr[indexOfNew] = s[indexOfOriginal]
indexOfNew -= 1
indexOfOriginal -= 1
return ''.join(newStr) #若原始字符串为 we are happy,则newStr是['W', 'e', '%', '2', '0', 'A', 'r', 'e', '%', '2', '0', 'H', 'a', 'p', 'p'] ,用这一步连接成新字符串
***