CHUAN2 DEV ENGINE
996 正版授权研发中心 · 360 授权合作教学中心 · 抖音传奇直播合作授权 · 快手推广运营商授权
OFFICIAL LICENSED ACADEMY 查验官方授权证书 →
// 威海旷世互娱教学基地 · 技术文章
入门夯实996引擎string.reverse回文判断

【入门夯实】字符串reverse的应用:反向遍历与回文判断

2026-09-25 08:47 作者:996 技术组 996引擎Lua教程传奇脚本入门夯实996引擎Luastring.reverse回文判断

学员常见误区

判断一个字符串是否为回文(正读反读相同),学员手写双指针从两端向中间比对——能实现但代码冗长,且容易在边界条件上出错。string.reverse 一步反转字符串后直接比较原串即可:反转后与原串相同则为回文。另一个误区是忘记中文多字节字符不能逐字节反转。错误场景:

lua
local function isPalindromebad(s)
    return s == string.reverse(s)
end
isPalindromebad("上海自来水来自海上")

中文字符串按字节反转后与原串不等——即使原串确实是回文。

正确姿势

纯 ASCII 字符串直接 reverse 比较判断回文;含中文的字符串需要按 UTF-8 字符切割后再判断。规范写法。示例代码如下:

lua
local function isPalindromeASCII(s)
    return s == string.reverse(s)
end
local function isPalindromeUTF8(s)
    local chars = {}
    for ch in string.gmatch(s, "[\128-\191]*[\194-\244]") do
        chars[#chars + 1] = ch
    end
    local rev = {}
    for i = #chars, 1, -1 do
        rev[#rev + 1] = chars[i]
    end
    return table.concat(chars) == table.concat(rev)
end
print(isPalindromeASCII("abcba"))

gmatch 的模式按 UTF-8 编码规则匹配多字节字符,切割后反转再拼接比较。

引擎验证

三步验证:abcba 用 isPalindromeASCII 返回 true;上海自来水来自海上 用 isPalindromeUTF8 返回 true;中文串误用 reverse 对比 UTF8 版理解字节与字符差异。

举一反三

反向遍历的另一种用法是从末尾查找:string.find 不支持从后往前,先 reverse 再 find 再换算位置。示例代码如下:

lua
local function findLast(s, sub)
    local rs = string.reverse(s)
    local pos = string.find(rs, sub, 1, true)
    if pos == nil then
        return nil
    end
    return #s - pos - #sub + 2
end
作者履历与出处

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

← 返回文章地图返回研学路径

幂尔框架 · 实战干货 · 接口调用

LATEST ARTICLES

全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →