劍指Offer(二):替換空格

題目

請實現一個函數,將一個字符串中的每個空格替換成「%20」。例如,當字符串爲We Are Happy.則經過替換之後的字符串爲We%20Are%20Happy

思路

最簡單的方法就是從頭到尾遍歷,但是時間複雜度爲O(n^2)。
本文采用一種時間複雜度爲O(n)的方法。
我們可以先遍歷一次字符串,這樣就可以統計出字符串空格的總數,並可以由此計算出替換之後的字符串的總長度。每替換一個空格,長度增加2,因此替換以後字符串的長度等於原來的長度加上2乘以空格數目。以"We are happy"爲例,「We are happy"這個字符串的長度爲14(包括結尾符號」\n"),裏面有兩個空格,因此替換之後字符串的長度是18。
我們從字符串的尾部開始複製和替換。首先準備兩個指針,P1和P2,P1指向原始字符串的末尾,而P2指向替換之後的字符串的末尾。接下
來我們向前移動指針P1,逐個把它指向的字符複製到P2指向的位置,直到碰到第一個空格爲止。碰到第一個空格之後,把P1向前移動1格,在P2之前插入字符串"%20"。由於"%20"的長度爲3,同時也要把P2向前移動3格。

移動示意圖

在這裏插入圖片描述

編程實現

python3.6

#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
@File  : array_01.py
@Author: Piepis
@Date  : 2019/3/25 10:47
@Desc  : 去除空格
'''
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        t=s.replace(' ','%20')
        return print(t)
s='We Are Happy.'
a=Solution()
a.replaceSpace(s)