HTML文本格式合并优化算法:智能嵌套与标签最小化

大墨同学_8132

大墨同学_8132

2026-11-12

739人浏览

原创

HTML文本格式合并优化算法:智能嵌套与标签最小化

本文介绍一种贪心算法,用于将多个带格式标记的文本片段智能合并为结构最优的html代码,在保证语义正确的同时最小化标签数量,并合理嵌套不同长度的格式链。

本文介绍一种贪心算法,用于将多个带格式标记的文本片段智能合并为结构最优的html代码,在保证语义正确的同时最小化标签数量,并合理嵌套不同长度的格式链。

要实现高效、语义清晰且标签精简的HTML格式合并(如 text1text2text3 → 优化为 text1text2text3),关键不在于逐段渲染,而在于全局感知格式跨度——即每个格式(如 bold、italic)实际覆盖哪些连续文本块。由此引出核心思想:按格式作用域长度降序排列,优先包裹更长的格式链;同时动态维护当前激活格式栈,仅在必要时开闭标签。

算法步骤(优化版贪心策略)

  1. 预处理:计算各格式的作用域
    对每个格式 f(如 "bold"),扫描所有文本块,确定其首次开启位置 start_f 和最后一次关闭位置 end_f(含 end_f 的前一块)。作用域长度 len_f = end_f − start_f + 1。

  2. 排序格式:按作用域长度降序
    若 len_italic > len_bold,则 italic 应处于外层;若相等,可依约定(如字典序或声明顺序)打破平局。

  3. 构建格式事件流(关键)
    为每块文本 i(0-indexed),记录:

    • starts[i]: 本块开始时需启用的格式集合(按作用域长度降序)
    • ends[i]: 本块结束后需关闭的格式集合(即 i+1 块不再包含该格式)
  4. 单遍生成HTML(带栈管理)
    维护当前已开启但未关闭的格式栈 openStack(按嵌套深度从外到内),初始为空。遍历每块 i:

    # 关闭不再需要的格式(从栈顶向下匹配)
    while openStack and openStack[-1] not in starts[i]:
        print(f"{openStack.pop()}>")
    
    # 开启新格式(按作用域长度降序,确保长格式在外)
    for f in sorted(starts[i], key=lambda x: -scope_len[x]):
        if f not in openStack:  # 避免重复开启
            print(f"")
            openStack.append(f)
    
    # 输出当前文本内容
    print(texts[i])

    ✅ 注意:starts[i] 是第 i 块起始时应激活的格式(即该块本身带此格式),而非“从此块开始生效”。因此关闭判断基于 openStack[-1] not in starts[i] —— 若栈顶格式在下一块不出现,即需在此块后关闭。

示例验证

输入:

DeepBI DHTML 页面生成器
DeepBI DHTML 页面生成器

生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur

下载
text1[bold,italic]   → starts[0] = {bold, italic}, scope: bold→[0,1], italic→[0,1]
text2[bold]          → starts[1] = {bold},           scope: bold→[0,1], italic→[0,1]
text3[]              → starts[2] = {}
  • scope_len: italic=2, bold=2 → 可按字母序排为 [italic, bold]
  • i=0: 开 → stack = ['i','b'] → 输出 text1
  • i=1: starts[1]={bold} → 'i' 不在其中 → 关 ;'b' 在 → 保留 → 输出 text2
  • i=2: starts[2]={} → 关 → 输出 text3
    最终:
    <i>
    <b>text1</b>
    text2
    </i>
    text3

    ⚠️ 但注意:原需求中 text1[bold,italic] + text2[bold] + text3[] 的期望输出是 text1text2text3,说明bold 覆盖更长(0–1),italic 仅 0 → 此时 scope_len[bold]=2, scope_len[italic]=1,bold 应在外层。算法自动适配:排序后 starts[i] 按 [bold, italic] 处理,i=0 开 ,i=1 仅需保留 bold,故关 ,i=2 关 ,完美匹配。

实现提示与边界处理

  • 空格式块:starts[i] = set() 表示无格式,触发全部关闭。
  • 格式重叠不连续:如 text1[bold], text2[], text3[bold] → bold 作用域为 [0,0] 和 [2,2],非连续,scope_len[bold] = 1(取最大连续段),确保不错误跨段包裹。
  • 性能:O(n·f + f log f),n 为文本块数,f 为格式种类数,适用于常规文档处理。
  • 扩展性:支持任意嵌套格式(如 underline, code, color),只需统一纳入作用域分析与排序。

该算法以简洁的贪心逻辑,兼顾语义准确性与HTML结构优雅性,是富文本合并场景中标签优化的工业级实践方案。

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关文章

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

html

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
html版权符号
html版权符号

html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.14

7455

7

html在线编辑器
html在线编辑器

html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

2023.06.21

4092

4

html网页制作
html网页制作

html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.31

3770

5

html空格
html空格

html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.01

3779

5

html是什么
html是什么

HTML是一种标准标记语言,用于创建和呈现网页的结构和内容,是互联网发展的基石,为网页开发提供了丰富的功能和灵活性。本专题为大家提供html相关的各种文章、以及下载和课程。

2023.08.11

5259

6

html字体大小怎么设置
html字体大小怎么设置

在网页设计中,字体大小的选择是至关重要的。合理的字体大小不仅可以提升网页的可读性,还能够影响用户对网页整体布局的感知。php中文网将介绍一些常用的方法和技巧,帮助您在HTML中设置合适的字体大小。

2023.08.11

3701

3

html转txt
html转txt

html转txt的方法有使用文本编辑器、使用在线转换工具和使用Python编程。本专题为大家提供html转txt相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

3529

3

html文本框代码怎么写
html文本框代码怎么写

html文本框代码:1、单行文本框【<input type="text" style="height:..;width:..;" />】;2、多行文本框【textarea style=";height:;"></textare】。

2023.09.01

3028

6

HTML嵌入CSS样式的方法
HTML嵌入CSS样式的方法

HTML嵌入CSS样式的方法有内联样式、内部样式表和外部样式表。本专题为大家提供CSS样式相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.20

3208

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
GDB 17.2 官方文档集合
GDB 17.2 官方文档集合

共0课时 | 0人学习

Bootstrap 入门安装配置
Bootstrap 入门安装配置

共0课时 | 0人学习

38+ PhpStorm 提示和技巧
38+ PhpStorm 提示和技巧

共1课时 | 238人学习