本问题对应的 leetcode 原文链接:剑指 Offer 05. 替换空格

问题描述

请实现一个函数,把字符串 s 中的每个空格替换成”%20″。

示例 1:

输入:s = "We are happy."
输出:"We%20are%20happy."

限制:

0 <= s 的长度 <= 10000

解题思路

视频讲解直达: 本题视频讲解

代码实现

    // Java中的常规做法
    // public String replaceSpace(String s) {
    //     // 常规
    //     StringBuilder builder = new StringBuilder();
    //     for(int i = 0; i < s.length(); i++){
    //         if(s.charAt(i) == ' '){
    //             builder.append("%20");
    //         } else {
    //             builder.append(s.charAt(i));
    //         }
    //     }
    //     return builder.toString();
    // }

    //这个做法是模拟原地扩容的,但是Java并不支持扩容,所以我们只是联系一下代码怎么写
    public String replaceSpace(String s) {
        // 统计有多少空格
        int count = 0;
        for(int i = 0; i < s.length(); i++){
            if(s.charAt(i) == ' '){
                count ++;
            }
        }

        char[] res = new char[s.length() + count * 2];
        int k = res.length - 1;
        // 从右往左遍历
        for(int i = s.length() - 1; i >= 0; i--){
            // 从右往左移动字符与替换字符
            if(s.charAt(i) == ' '){
                res[k--] = '0';
                res[k--] = '2';
                res[k--] = '%';
            } else {
                res[k--] = s.charAt(i);
            }
        }
        return new String(res);
    }

Python

class Solution(object):
    def replaceSpace(self, s):
        """
        :type s: str
        :rtype: str
        """
        count = 0
        for i in s:
            if i == ' ':
                count += 1

        res = [' '] * (count * 2 + len(s))
        k = len(res) - 1
        for i in range(len(s)-1, -1, -1):
            if s[i] == ' ':
                res[k] = '0'
                res[k-1] = '2'
                res[k-2] = '%'
                k -= 3
            else:
                res[k] = s[i]
                k -= 1
        return ''.join(res)

C++

class Solution {
public:
    string replaceSpace(string s) {
        int count = 0;
        for(int i = 0; i < s.size(); i++){
            if(s[i] == ' '){
                count ++;
            }
        }
        int len = s.size() + count * 2;
        string res(len, ' ');
        int k = len - 1;
        for(int i = s.size() - 1; i >= 0; i--){
            if(s[i] == ' '){
                res[k--] = '0';
                res[k--] = '2';
                res[k--] = '%';
            } else {
                res[k--] = s[i];
            }
        }
        return res;
    }
};

Go

func replaceSpace(s string) string {
    count := 0
    for _, val := range s {
        if val == ' ' {
            count++
        }
    }
    res := make([]byte, len(s)+count*2)
    k := len(res) - 1
    for i := len(s) - 1; i >= 0; i-- {
        if s[i] == ' ' {
            res[k] = '0'
            res[k-1] = '2'
            res[k-2] = '%'
            k -= 3
        } else {
            res[k] = s[i]
            k--
        }
    }
    return string(res)
}

JS

/**
 * @param {string} s
 * @return {string}
 */
var replaceSpace = function(s) {
    // 统计有多少空格
    let count = 0;
    for(let i = 0; i < s.length; i++){
        if(s.charAt(i) == ' '){
            count ++;
        }
    }

    let res = new Array(s.length + count * 2);
    let k = res.length - 1;
    // 从右往左遍历
    for(let i = s.length - 1; i >= 0; i--){
        // 从右往左移动字符与替换字符
        if(s.charAt(i) == ' '){
            res[k--] = '0';
            res[k--] = '2';
            res[k--] = '%';
        } else {
            res[k--] = s.charAt(i);
        }
    }
    return res.join('');
};

发表回复

后才能评论