轉載本文章請標明作者和出處
本文出自《Darwin的程序空間》
本文題目和部分解題思路來源自《劍指offer》第二版
題目
請實現一個函數,把字符串 s 中的每個空格替換成"%20"
-
示例
輸入:s = "We are happy." 輸出:"We%20are%20happy."
解題分析
這道題比較簡單,但是有點意外的是,我做完之後竟然和標準答案一模一樣,在力扣也是雙100%;
這個是個替換字符串內容的題,顯然,各種語言都提供了API,當然如果我們這麼做就失去了算法的意義;
首先我們要選定一個容器來承載替換之後的字符,這個容器顯然是一個字符數組,那麼這個數組我們長度選擇多少呢?這是個關鍵,我們可以看到,遇到一個空格之後要替換成%20,也就是一個字符替換成三個字符,那麼就算題目中所有的字符都是空格,我們定義容器的長度爲3倍後的長度,也完全夠用了;
接下來就比較簡單了,我們只需要遍歷原字符串,如果遇到空格,就連續加入三個字符%、2、0,否則就把原來的字符加進去即可,這樣我們會得到一個新的字符數組,但是這個數組有可能最後幾位沒有用到,我們用遍歷時候的索引截取一下重新構建即可;
代碼
ps:這裏筆者使用的jdk爲1.8、Python3.7版本
-
java實現
class Solution { public String replaceSpace(String s) { char[] arr = new char[3 * s.length()]; int index = 0; for (char c : s.toCharArray()) { if (' ' == c) { arr[index++] = '%'; arr[index++] = '2'; arr[index] = '0'; } else { arr[index] = c; } index++; } return new String(arr, 0, index); } }
-
Python實現
class Solution: def replaceSpace(self, s: str) -> str: arr = [0] * (3 * len(s)) index = 0 for i in s: if i == ' ': arr[index] = '%' index += 1 arr[index] = '2' index += 1 arr[index] = '0' else: arr[index] = i index += 1 return ''.join(arr[:index])