题解 | #替换空格#
替换空格
http://www.nowcoder.com/practice/0e26e5551f2b489b9f58bc83aa4b6c68
package main
import "strings"
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return string字符串
*/
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()
}
使用“+”凭借2给字符串是,会生成一新的字符串,那么就需要开辟一段ixn的空间,新空间的大小是原来字符串的大小之和。 假设一个字符串大小为10byte,拼接1w次,需要申请的内存为: 10 + 2 * 10 + 3 * 10 + ... + 10000 * 10 byte = 500MB
而string.Builder的内存是以倍数申请的。 例如,初始大小为0,当第一次写入大小为10byte的字符串时,则会申请大小为16byte的内存(恰好大于10byte的2的指数),而第二次写入10byte时,内存不够,则申请32byte的内存,第三次写入内存足够,则不申请新的,以此类推。