面试题2:空格替换
def replaceSpace(s):
# write code here
if s == None:
return None
n = 0
for i in range(len(s)): #首先计算字符串s的空格数
if s[i] == ' ':
n = n + 1
l1 = len(s)
l2 = l1 + n * 2 #得到新字符串str的长度
str = [1] * l2 #生成空str列表
p1 = l1 - 1 #针对两个字符串设置两个指针
p2 = l2 - 1
while (p1 >= 0): #while循环的条件是指针指向0索引 结束
if s[p1] != ' ': #当p1所指的位置不是空格,就直接将s的值赋给str
str[p2] = s[p1]
p1 = p1 - 1
p2 = p2 - 1
else: #当p1指向空格,那么在p2中加入%20
str[p2] = '0'
str[p2-1] = '2'
str[p2-2] = '%'
p1 = p1 - 1
p2 = p2 - 3
return ''.join(str) #将字符串连接起来
s = ' '
print(replaceSpace(s))
#思路:采用从后向前的方法,首先计算s的空格数,然后得到新字符串str的个数,接下来设置两个指针p1,p2,将两个字符串列表对应
#1.将字符串看成列表,可以用切片来取出具体的字符值
#2.注意while循环的条件和指针的使用方法
总结:遇到这个题有两个思路:思路1是从前往后移,思路2是从后往前移。但是从前往后移复杂度为O(),而从后往前移算法复杂度为O(n)。
参考博客(方法和总结都非常好):https://blog.csdn.net/ggdhs/article/details/89814919