1. 程式人生 > 其它 >劍指offer--字串

劍指offer--字串

字元換的替換

一般方法:
思路:從前向後,直接找到需要被替換的字元,進行替換
缺點:
需要移動被替換的字元其後字元,造成時間複雜度為O(n^2);

優化:
思路:從後向前,進行遍歷和替換;
首先遍歷,找出有多少個被替換的字元,然後計算出,替換字元後所需容器大小,使用雙指標從後向前進行遍歷,遇到被替換的字元時,進行替換,此時,時間複雜度為O(n)。

def replace_blank(string:str):
    original_length = len(string)
    if original_length == 0:
        return ''
    number_of_blank = 0
    for s in string:
        if s == ' ':
            number_of_blank += 1
    
    # new_length將空格替換成,‘%20’後的長度
    new_length = original_length + number_of_blank * 2
    
    index_of_original = original_length
    index_of_new = new_length
    new_string = [''] * index_of_new
    
    while index_of_original >= 0 and index_of_new >= index_of_original:
        if string[index_of_original] == ' ':
            new_string[index_of_new] = '0'
            index_of_new -=1
            new_string[index_of_new] = '2'
            index_of_new -= 1
            new_string[index_of_new] = '%'
            index_of_new -= 1
        else:
            new_string[index_of_new] = string[index_of_original]
            index_of_new -= 1
        index_of_original -= 1
    return "".join(new_string)

舉一反三:
在合併兩個資料(包括字元)時,如果從前往後複製每個數字(或字元)則需要重複移動數字(或字元)多次,那麼我們可以考慮從後往前複製,這樣就能減少移動的次數,從而提高效率。