LeetCode 剑指 Offer 05. 替换空格

题目链接:LeetCode 剑指 Offer 05. 替换空格

题意:

输入一个字符串 s ,然后将 s 中的每个空格替换成"%20"。

解题思路:

直接遍历一遍字符串,

  • 如果当前字符不是空格,则加入到结果中
  • 如果是空格,则将“%20”加入到结果集

完整代码如下:

func replaceSpace(s string) string {
    var res []byte 
    for i,n:=0,len(s);i<n;i++{
        if s[i] == " "{
            res = append(res,'%')
            res = append(res,'2')
            res = append(res,'0')
        }else{
            res = append(res,[]byte(s[i]))
        }
    }
    return string(res)
}

也可以实现在原地进行替换:首先将数组扩容到每个空格都替换成“%20”之后的大小,然后从后向前替换空格(双指针法)

代码如下:

// 原地修改
func replaceSpace(s string) string {
    b := []byte(s)
    length := len(b)
    spaceCount := 0
    for _, v := range b {// 计算空格数量
        if v == ' ' {
            spaceCount++
        }
    }
    resizeCount := spaceCount * 2 // 扩展原有切片
    tmp := make([]byte, resizeCount)
    b = append(b, tmp...)
    i,j := length - 1, len(b) - 1
    for i >= 0 {
        if b[i] != ' ' {
            b[j] = b[i]
            i--
            j--
        } else {
            b[j] = '0'
            b[j-1] = '2'
            b[j-2] = '%'
            i--
            j = j - 3
        }
    }
    return string(b)
}
posted @ 2023-05-10 15:04  小星code  阅读(23)  评论(0)    收藏  举报