请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = "We are happy."
输出:"We%20are%20happy."
限制:
0 <= s 的长度 <= 10000
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/ti-huan-kong-ge-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法一:新建byte,遍历添加
func replaceSpace(s string) string { b := []byte(s) result := make([]byte, 0) for i := 0; i < len(b); i++ { if b[i] == ' ' { result = append(result, []byte("%20")...) } else { result = append(result, b[i]) } } return string(result) }
解法二:原地扩容,使用双指针
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 := length - 1 j := 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) }
对于上述两种方法所占用的空间其实相同,因为Golang 中 slice 的扩容 会直接增加一个CAP,相当于扩大一倍
标签:string,Offer,--,05,spaceCount,空格,result,GO,byte From: https://www.cnblogs.com/slowlydance2me/p/17215680.html