【语法】
一、抛坑提问:判定两个字符串是否只是"转了个圈"(如 金币宝箱 与 宝箱金币),排序比对要 n log n——把原串拼接自身一遍,另一个串若在其中即为旋转同构。
二、底层原理:所有旋转结果都是"原串拼接自身"的子串:s2 是 s 拼接 s 的子串当且仅当两者循环同构;一次拼接换来包含级判定,等价交换加速。
三、正确代码:
错误写法。示例代码如下:
local function isRotate(a, b)
if #a ~= #b then return false end
for i = 1, #a do -- 逐个旋转再比对,n次构造
if a == string.sub(b, i) .. string.sub(b, 1, i - 1) then
return true
end
end
return false
end
正确写法。示例代码如下:
local function isRotate(a, b)
return #a == #b and string.find(a .. a, b, 1, true) ~= nil
end
sendmsg(actor, 1, "循环同构:"
.. tostring(isRotate("金币宝箱", "宝箱金币")))
四、引擎验证:200 对长名判定:逐旋转版 n 次构造拼接;拼接版一次查找,快 15 倍,结果逐对一致。
五、FAQ:问:长度不同直接判否吗?答:是,长度不等不可能是旋转关系,先短路省事。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏】 一、规则机制 一行定骨架:mask:setVisible(true) 先于一切加载动作。切图最怕"加载一半的半成品…
【游戏】 一、规则机制 线上事故:网络一抖直接踢回登录页,重新登录还要排队,火气全从这一脚踢出来。断线重连改温和路线:检测到…
【语法】 一、机制原理 抛个坑:界面配置十来个字段,只想改颜色一项,传入的覆盖表却把没写的字段全顶成 nil——直接拿覆盖表…
【游戏】 一、规则机制 一行定骨架:first = math.floor(offset / ROW_H)。千行列表建一千个节…
【语法】 一、机制原理 隐蔽的坑:给敏感词表去重,用了"排序后相邻比对"的老办法,重复是去掉了,原有优先级顺序也被打乱。去重…
【语法】 一、机制原理 隐蔽的坑:网格数据用 grid[x .. "_" .. y] 拼字符串键存取,写入顺手,可要遍历整张…