在开发博客项目中,需要使用 markdown 生成了对应的文章,生成文章之后提取出来 h1 和 h2 标签来组成对应的目录结构。
示例 1:
输入:
['H1', 'H1', 'H2', 'H2', 'H2', 'H1', 'H2']
输出:
[{tag: 'h1', children: [{}, {}, {}]}, {tag: 'h1', children: []}]
解题思路:
使用栈结构,stack 来进行存放 h1 标签。 使用另一个栈 o_stack 来保存当前所处的 h1 标签。 这样子,只需要匹配到后续的 h2 标签,就取 o_stack 栈顶元素。并将 h2 插入到 o_stack 元素。 最后的 o_stack 返回即可。
var stack = [];
var o_stack = [];
var l = ['H1', 'H1', 'H2', 'H2', 'H2', 'H1', 'H2'];
for (var i = 0, len = l.length; i < l.len; i++) {
var dir = {
tag: l[i],
children: []
}
if (dir.tag === 'H1') {
stack.push(dir);
o_stack.push(dir.tag !== 'H1' ? this.o_stack[this.o_stack.length - 1] : dir);
} else if (dir.tag === 'H2') {
o_stack[o_stack.length - 1].children.push(dir);
}
}
return o_stack;