请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解答思路
此题用python解答最简单的方法是使用字符串中的自带替换方法——replace
还有一种方法则需要将在每次遍历到空格时,在尾部填充两个任意字符,这样需要两个指针P1和P2,令P1指向字符串原本的末尾位置,P2指向字符串现在的末尾位置,P1和P2同时从最后向前遍历,当P1遍历到一个空格时,令P2指向的位置依次填充02%(%20的逆序),若没有遍历到空格就填充上P1指向字符的值,这里选择从后往前遍历是为了 改变P2所指向的内容时,不会影响到P1遍历原来字符串的内容
解题代码1,这种时间复杂度为N,空间复杂度为N
python
# -*- coding:utf-8 -*-
class Solution:
# s 源字符串
def replaceSpace(self, s):
# write code here
# return s.replace(' ','%20') 这种方法可以笔试时写,面试就还是算了☺
res = []
for i in s:
if i != " ":
res.append(i)
else:
res.append('%20')
return "".join(res)
java
class Solution {
public String replaceSpace(String s) {
StringBuilder res = new StringBuilder();
for(Character c:s.toCharArray()){
if (c == ' ') {
res.append("%20");
}else {
res.append(c);
}
}
return res.toString();
}
}
解题代码2 这种时间复杂度为N,空间复杂度为1
python
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'] ,用这一步连接成新字符串
***