项目背景
字符串反转(Reverse String)是编程语言中最经典、最基础的算法之一,也是很多技术面试、算法题和系统底层库中经常使用的操作。
在实际开发中,字符串反转并不仅仅是算法练习,它在很多真实场景中都会用到,例如:
1. 日志分析系统
日志 ID 或 Token 需要反向处理进行匹配。
2. 编码与解码
部分简单加密算法会使用字符串反转作为步骤之一。
3. 文本处理
如自然语言处理中的回文检测。
4. URL 处理
部分系统需要反转字符串进行索引优化。
讲解 Go 语言字符串反转算法,区分 ASCII 与 Unicode 处理方式。通过 byte 和 rune 两种类型实现反转,利用双指针算法优化效率,避免中文乱码。包含完整工具类代码、测试用例及常见问题解答,适用于文本处理与面试场景。
字符串反转(Reverse String)是编程语言中最经典、最基础的算法之一,也是很多技术面试、算法题和系统底层库中经常使用的操作。
在实际开发中,字符串反转并不仅仅是算法练习,它在很多真实场景中都会用到,例如:
日志 ID 或 Token 需要反向处理进行匹配。
部分简单加密算法会使用字符串反转作为步骤之一。
如自然语言处理中的回文检测。
部分系统需要反转字符串进行索引优化。
很多算法问题都会以字符串反转作为基础步骤,例如:
例如:
输入字符串:hello 输出:olleh
但在 Go 语言中,实现字符串反转并不像表面那么简单,因为:
Go 字符串是 UTF-8 编码。
因此需要考虑:
如果处理不当,可能会出现乱码。
因此本教程将实现:
实现函数:
func ReverseString(str string) string
功能:
输入:hello 输出:olleh
输入:golang 输出:gnalog
输入:你好世界 输出:界世好你
输入:"" 输出:""
输入:a 输出:a
实现:
Go 字符串:
例如:hello
底层:[104 101 108 108 111]
Go 中字符使用 rune 表示。
for _, r := range str
优点:
| 类型 | 字符长度 |
|---|---|
| ASCII 字符 | 1 字节 |
| 中文 | 3 字节 |
| emoji | 4 字节 |
因此:
直接反转 byte 会导致中文乱码。
字符串反转最经典算法:
left = 0 right = n-1 swap(left, right)
时间复杂度:O(n) 空间复杂度:O(n)
我们实现两种核心算法。
流程:
示例:hello 过程: h e l l o o l l e h
优点:
缺点:
流程:
优点:
// ===================================== // file: reverse/reverse.go // ===================================== package reverse
// StringReverser 字符串反转结构体
type StringReverser struct{}
// NewStringReverser 创建实例
func NewStringReverser() *StringReverser {
return &StringReverser{}
}
// ReverseASCII ASCII 版本字符串反转
// 适用于仅包含英文字符的字符串
func (r *StringReverser) ReverseASCII(str string) string {
if len(str) <= 1 {
return str
}
bytes := []byte(str)
left := 0
right := len(bytes) - 1
for left < right {
bytes[left], bytes[right] = bytes[right], bytes[left]
left++
right--
}
return string(bytes)
}
// ReverseUnicode Unicode 安全版本
func (r *StringReverser) ReverseUnicode(str string) string {
if str == "" {
return ""
}
runes := []rune(str)
left := 0
right := len(runes) - 1
for left < right {
runes[left], runes[right] = runes[right], runes[left]
left++
right--
}
return string(runes)
}
// ===================================== // file: main.go // ===================================== package main
import (
"fmt"
"reverse/reverse"
)
func main() {
reverser := reverse.NewStringReverser()
testCases := []string{
"hello",
"golang",
"hello world",
"你好世界",
"",
}
for _, s := range testCases {
fmt.Println("原字符串:", s)
fmt.Println("ASCII 反转:", reverser.ReverseASCII(s))
fmt.Println("Unicode 反转:", reverser.ReverseUnicode(s))
fmt.Println("----------------------------")
}
}
构造函数。创建字符串反转工具实例。
功能:实现 ASCII 字符串反转。
步骤:
特点:
功能:实现 Unicode 安全字符串反转。
步骤:
优点:
本项目实现了一个完整的字符串反转算法工具,包含:
功能:
算法复杂度:
时间复杂度:O(n) 空间复杂度:O(n)
适用于:
因为 Go 字符串是 UTF-8。
中文示例:你好
byte 反转会变成乱码。
适用于:
推荐:rune 版本
保证 Unicode 安全。
Builder 主要用于拼接字符串,不适合反转。
例如:hello world 变成:world hello
例如:level
例如:abcdef 变成:defabc
例如:strutil
包含:
本教程完整实现了:
Go 语言反转字符串算法(ASCII + Unicode 版本)。
通过本项目你可以掌握:

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online