2023-11-23 LeetCode每日一题(HTML 实体解析器)

2023-11-23每日一题

一、题目编号

复制代码
1410. HTML 实体解析器

二、题目链接

点击跳转到题目位置

三、题目描述

「HTML 实体解析器」 是一种特殊的解析器,它将 HTML 代码作为输入,并用字符本身替换掉所有这些特殊的字符实体。

HTML 里这些特殊字符和它们对应的字符实体包括:

  • **双引号:**字符实体为 " ,对应的字符是 " 。
  • **单引号:**字符实体为 ' ,对应的字符是 ' 。
  • **与符号:**字符实体为 & ,对应对的字符是 & 。
  • **大于号:**字符实体为 > ,对应的字符是 > 。
  • **小于号:**字符实体为 < ,对应的字符是 < 。
  • **斜线号:**字符实体为 ⁄ ,对应的字符是 / 。

给你输入字符串 text ,请你实现一个 HTML 实体解析器,返回解析器解析后的结果。

示例 1:

示例 2:

示例 3:

示例 4:

示例 5:

四、解题代码

cpp 复制代码
class Solution {
public:
    using EntityChar = pair <string, char>;

    vector <EntityChar> entityList;

    string entityParser(string text) {
        entityList = vector({
            (EntityChar){"&quot;", '"'},
            (EntityChar){"'", '\''},
            (EntityChar){"&amp;", '&'},
            (EntityChar){"&gt;", '>'},
            (EntityChar){"&lt;", '<'},
            (EntityChar){"&frasl;", '/'}
        });

        string r = "";
        for (int pos = 0; pos < text.size(); ) {
            bool isEntity = false;
            if (text[pos] == '&') {
                for (const auto &[e, c]: entityList) {
                    if (text.substr(pos, e.size()) == e) {
                        r.push_back(c);
                        pos += e.size();
                        isEntity = true;
                        break;
                    }
                }
            }
            if (!isEntity) {
                r.push_back(text[pos++]);
                continue;
            }
        }
        return r;
    }
};

五、解题思路

(1) 模拟即可。

相关推荐
owde15 分钟前
顺序容器 -list双向链表
数据结构·c++·链表·list
第404块砖头17 分钟前
分享宝藏之List转Markdown
数据结构·list
hyshhhh34 分钟前
【算法岗面试题】深度学习中如何防止过拟合?
网络·人工智能·深度学习·神经网络·算法·计算机视觉
蒙奇D索大1 小时前
【数据结构】第六章启航:图论入门——从零掌握有向图、无向图与简单图
c语言·数据结构·考研·改行学it
A旧城以西1 小时前
数据结构(JAVA)单向,双向链表
java·开发语言·数据结构·学习·链表·intellij-idea·idea
杉之1 小时前
选择排序笔记
java·算法·排序算法
烂蜻蜓2 小时前
C 语言中的递归:概念、应用与实例解析
c语言·数据结构·算法
OYangxf2 小时前
图论----拓扑排序
算法·图论
我要昵称干什么2 小时前
基于S函数的simulink仿真
人工智能·算法
AndrewHZ2 小时前
【图像处理基石】什么是tone mapping?
图像处理·人工智能·算法·计算机视觉·hdr