解题思路: 以字符串中间字符为中心,遍历交换前后字符来达到翻转的目的, 任何语言都可以这样实现。

我们只需要求出字符串到长度就可以了,请看下面的例子:

	str := "hello世界"
	fmt.Println(len(str))

运行结果:

11
hello世界

那我们如何求我们想要的字符串长度呢?

	str := "hello世界"
	// 方法一
	strArr := []rune(str)
	fmt.Println(len(strArr))
	// 方法二
	fmt.Println(utf8.RuneCountInString(str)) // 调用 unicode/utf8 标准库

运行结果:

7
7

方法一中,我们把字符串转成一个rune数组,rune是个啥?我们看下官方解释

// rune is an alias for int32 and is equivalent to int32 in all ways. It is
// used, by convention, to distinguish character values from integer values.
type rune = int32

从golang源码中看出,它是int32的别名,对于byte(-128~127),可表示的字符更多。

话不多说,我们回到主题翻转字符串:

package main

import "fmt"

func ReverseString(str string) string {
	strArr := []rune(str)
	for i := 0; i < len(strArr)/2; i++ {
		strArr[len(strArr)-1-i], strArr[i] = strArr[i], strArr[len(strArr)-1-i]
	}
	return string(strArr)
}

func main() {
	str := "hello世界"
	fmt.Println(ReverseString(str))
}

运行结果:

界世olleh