直接创建一个新数组来做这个题很容易。我们也可以在原数组上操作来节省空间。操作方法为先统计空格数目,然后将数组扩容,之后倒叙复制即可。由于字符串不支持单位赋值,只好转换成list操作。此外,对str连续赋值可以使用ljust,很快。
class Solution:
def replaceSpace(self, s: str) -> str:
s = list(s)
num = 0
for c in s:
if c == ' ':
num += 1
s.extend(['*']*num*2)
p1, p2 = len(s)-1, len(s)-num*2-1
while p2 >= 0:
if s[p2] == ' ':
s[p1-2:p1+1] = '%20'
p1 -= 3
else:
s[p1] = s[p2]
p1 -= 1
p2 -= 1
return ''.join(s)
相关题目:两个排序数组融合
这题很容易想到从头到尾生成的方法。按照本题思路,也可以考虑从尾到头的方法节省空间。和上述方法相同,两个指针,最大的就插入后面,肯定是不会覆盖的,因为空间正好够。