劍指offer | 面試題5:替換空格

轉載本文章請標明作者和出處
本文出自《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])
    


喜歡的朋友可以加我的個人微信,我們一起進步
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章