一.题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
二.解题思路
这道题其实主要是考察inplace的修改,即在原变量上,不申请新的对象,进行修改。
C/C++,Java传的参数都是可变长的字符串变量。比如char指针和StringBuffer.
但是对于python来说就没有,不过按照思路来说还是讲一讲。
1.新开一个空字符串rst,一次遍历原字符串,如果不是空格,则将原字符与rst相加形成新的字符串,如果是空格则将rst与%20相加形成新的字符串。
2.inplace修改:假设我们接收的参数有字符串(前面是有效字符,后面接上足够多的空字符生成新字符串),和length(表示有效字符的个数)。首先从前往后遍历修改肯定不行,这样的话遇到一个空格,我们添加%20需要把后面所有的字符都往后移动一格,时间复杂度O(N*N).
换个思路:我们首先需要从前往后遍历,数总共有多少个空格,这样我们知道了到形成新字符串需要多少length,然后我们再从后往前修改字符串,从后往前遍历字符串,然后用一个指针记录当前字符应该移动的位置,假设总共有count个字符,当前遍历到的字符在原字符串中的索引为i,那么对与任意字符其新字符串中的位置应该是i+2*count. 遇到空格,count需要-1,然后替换字符。count的更新顺序没啥影响。
三.源码
class Solution:
# s 源字符串
def replaceSpace(self, s):
# write code here
rst=''
for ch in s:
rst+=ch if ch !=' ' else '%20'
return rst
# 假设我们传进来的也是一个指针和长度length,类似C++
# 从左至右扫描,从右至左移位处理
count=0
for i in range(length):
count+=1 if ch==' ' else pass
i=length
while i>=0:
if s[i]==' ':
count-=1
s[i+2*count]='%'
s[i+2*count+1]='2'
s[i+2*count+2]='0'
else:s[i+2*count]=s[i]
return s