Open biganans opened 6 years ago
我觉得代码写得有点儿太长了,是不是应该组织一下逻辑想想怎么缩短
太长了, 简单的逻辑就要写简单一点, 这个题其实从读题到写完就期望20分钟而已, 不要搞这么复杂呀... 另外我看不太懂lua
我给写了个lua版的,你参考参考?
-- '<': 60, '>': 62, '/':47
function fmt(text)
local char_at = function(i) -- 获取字符串元素
return string.byte(text, i)
end
local acc = {} -- 结果存储表
local ind = 0 -- 缩进空格数
local i, j = 1, nil -- 一前一后两个游标
local push = function() -- 结果表添加元素
table.insert(acc, string.rep(" ", ind)
.. string.sub(text, i, j))
end
local match_tag = function() -- 匹配标签(j 最终指向 '>')
while char_at(j + 0) ~= 62 do j = j + 1 end
end
local match_ctt = function() -- 匹配内容(j 最终指向 '<' 的前一个位置)
while char_at(j + 1) ~= 60 do j = j + 1 end
end
while char_at(i) ~= nil do
if char_at(i) == 60 then -- i 指向 '<' 则开始匹配标签
j = i + 1; match_tag()
if char_at(i + 1) == 47 then -- 如果标签以 '</' 开始
ind = ind - 4; push() -- 表示结束标签,先减少缩进
elseif char_at(j - 1) ~= 47 then -- 如果标签不以 '/>' 结束
push(); ind = ind + 4 -- 表示开始标签,下一行增加缩进
else
push()
end
else -- i 不指向 '<' 则开始匹配内容
j = i + 0; match_ctt()
push()
end
i = j + 1
end
return table.concat(acc, "\n")
end
print(fmt("<a>123<b>456<c/></b></a>"))
Question_ID: Q001
Language: Lua 5.3.2
Time Cost: 90-mins
Time Complexity: {}
Solution
My Code
Other
lua的字符串数组直接用readStr[i]取出来是nil,刚开始怎么都不对后面查阅了一番。 写的比较烂,大家勿喷哈。