题目
题解与分析
字符串替换,想到的第一个办法就是调库,strings.Replace,但这道题显然不能这样
方法一
然后我想到一个办法是按空格分割,然后用”%20″链接
func replaceSpace(s string) string {
sp := strings.Split(s, " ")
ret := strings.Join(sp, "%20")
return ret
}
方法二
除了第一个办法,还有一个办法,不过go语言不支持,在go语言里字符串是不可变类型,,不过这个思路是很好的思路
在原来字符串基础上,根据空格多少,增加2倍空格的空间,再采用双指针方法从后往前遍历,在新增加的空间上的指针命名为i,指向原字符数组末尾的指针命名为j,
- 如果s[j]!=’ ‘ ,那么
s[i] = s[j]
,i--
使i继续往前走 - 如果
s[j] == ' '
,那么
s[i] = '0'
s[i-1] = '2'
s[i-2] = '%'
i = i - 3
func replaceSpace(ss string) string {
s := []byte(ss)
length := len(s)
// 判断空格个数
cout := 0
for i:=0; i<length;i++{
if s[i]==' '{
cout += 1
}
}
// 新增加空间
tmp := make([]byte, cout*2)
// 给原来的字符数组扩容
s = append(s, tmp...)
nelngth := len(s)
fmt.Println(nelngth)
i := nelngth-1
for j:=length-1;j>=0;j--{
// 如果是空格
if s[j]==' '{
// s[i] = '0'
// i--
// s[i] = '2'
// i--
// s[i] = '%'
// i--
s[i] = '0'
s[i-1] = '2'
s[i-2] = '%'
i = i-3
}else{
s[i] = s[j]
i--
}
}
return string(s)
}