lifei6671 / interview-go

golang面试题集合

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

第三题的答案是否使用了额外的空间

gamelee opened this issue · comments

str := []rune(s)
这里的强制类型转换会生成新的空间

str := []rune(s) 这里的强制类型转换会生成新的空间

这个确实是使用额外空间了,得用unsafe找到Data得偏移量,然后用指针进行替换(这样就只用几个普通变量了,另外由于字符串长度没变,所以不会玩坏内存空间)
不过有一点很麻烦,unsafe方法仅限于ASCII得情况,因为UTF8是不定长的,需要写一个从比特切片里面弄出单个字符的函数,不过由于UTF8不定长的特性,如果前面都是特殊字符后面都是字母,那这个事基本就炸了。。。。很难做到不申请大块额外空间