题解 | #替换空格#

替换空格

http://www.nowcoder.com/practice/0e26e5551f2b489b9f58bc83aa4b6c68

package main

func replaceSpace( s string ) string {
    var str string
    for i := 0 ; i < len(s) ; i ++ {
        if s[i] != ' ' {
            str += s[i:i+1] //一个字符一个字符地拼接
        } else {
            str += "%20" //遇到空格时拼接"%20"
        }
    }
    return str
}
全部评论
func replaceSpace( s string ) string { var str strings.Builder for i := 0 ; i < len(s) ; i ++ { if s[i] != ' ' { str.WriteString(s[i:i+1]) //一个字符一个字符地拼接 } else { str.WriteString("%20") //遇到空格时拼接"%20" } } return str.String() } 字符串在 Go 语言中是不可变类型,占用内存大小是固定的,当使用 + 拼接 2 个字符串时,生成一个新的字符串,那么就需要开辟一段新的空间,新空间的大小是原来两个字符串的大小之和。拼接第三个字符串时,再开辟一段新空间,新空间大小是三个字符串大小之和,以此类推。假设一个字符串大小为 10 byte,拼接 1w 次,需要申请的内存大小为: 10 + 2 * 10 + 3 * 10 + ... + 10000 * 10 byte = 500 MB 而 strings.Builder,bytes.Buffer,包括切片 []byte 的内存是以倍数申请的。例如,初始大小为 0,当第一次写入大小为 10 byte 的字符串时,则会申请大小为 16 byte 的内存(恰好大于 10 byte 的 2 的指数),第二次写入 10 byte 时,内存不够,则申请 32 byte 的内存,第三次写入内存足够,则不申请新的,以此类推。
点赞 回复 分享
发布于 2021-10-17 13:33

相关推荐

评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务