劍指offer--字串
阿新 • • 發佈:2022-03-15
字元換的替換
一般方法:
思路:從前向後,直接找到需要被替換的字元,進行替換
缺點:
需要移動被替換的字元其後字元,造成時間複雜度為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)
舉一反三:
在合併兩個資料(包括字元)時,如果從前往後複製每個數字(或字元)則需要重複移動數字(或字元)多次,那麼我們可以考慮從後往前複製,這樣就能減少移動的次數,從而提高效率。