当前位置: 首页 > news >正文

【Leetcode合集】1410. HTML 实体解析器

1410. HTML 实体解析器

1410. HTML 实体解析器

代码仓库地址: https://github.com/slience-me/Leetcode

个人博客 :https://slienceme.xyz

  • 编写一个函数来查找字符串数组中的最长公共前缀。

    如果不存在公共前缀,返回空字符串 ""

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

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

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

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

    示例 1:

    输入:text = "&amp; is an HTML entity but &ambassador; is not."
    输出:"& is an HTML entity but &ambassador; is not."
    解释:解析器把字符实体 &amp; 用 & 替换
    

    示例 2:

    输入:text = "and I quote: &quot;...&quot;"
    输出:"and I quote: \"...\""
    

    示例 3:

    输入:text = "Stay home! Practice on Leetcode :)"
    输出:"Stay home! Practice on Leetcode :)"
    

    示例 4:

    输入:text = "x &gt; y &amp;&amp; x &lt; y is always false"
    输出:"x > y && x < y is always false"
    

    示例 5:

    输入:text = "leetcode.com&frasl;problemset&frasl;all"
    输出:"leetcode.com/problemset/all"
    

    提示:

    • 1 <= text.length <= 10^5
    • 字符串可能包含 256 个ASCII 字符中的任意字符。

方案1:暴力解

第一种纯暴力解,遍历替换

class Solution {
public:string entityParser(string text) {unordered_map<string, string> myMap = {{"&quot;",  "\""},{"&apos;",  "\'"},{"&amp;",   "&"},{"&gt;",    ">"},{"&lt;",    "<"},{"&frasl;", "/"}};for (const auto &map: myMap){string searchString = map.first;string replacementString = map.second;size_t pos = text.find(searchString); // 找到第一个匹配的位置// 循环替换所有匹配的内容while (pos != string::npos) {text.replace(pos, searchString.length(), replacementString); // 用替换字符串替换匹配字符串pos = text.find(searchString, pos + replacementString.length()); // 继续找下一个匹配的位置}}return text;}
};

执行用时分布 744ms 击败11.76%使用 C++ 的用户

消耗内存分布16.37MB 击败90.20%使用 C++ 的用户

方案2

发现没有优化太多,反而超时了

class Solution {
public:string entityParser(string text) {unordered_map<string, string> myMap = {{"&quot;",  "\""},{"&apos;",  "\'"},{"&amp;",   "&"},{"&gt;",    ">"},{"&lt;",    "<"},{"&frasl;", "/"}};for (int i = 0; i < text.length(); ++i){string temp="&";if (text[i]=='&'){if (text[i+1]=='\0' || text[i+1]=='&'){continue;}int indexj = i+1;while (text[indexj]!=';'){if (indexj>=text.length()){break;}temp += text[indexj];indexj+=1;}if (indexj>=text.length()){break;}temp += ';';size_t index = replaceStr(text, myMap, temp);if (index != -1){i = index;}} else if(text[i]=='\0'){continue;}}return text;}size_t replaceStr(string &text, unordered_map<string, string> &myMap, const string &temp) const {if(myMap.find(temp) != myMap.end()){string searchString = myMap.find(temp)->first;string replacementString = myMap.find(temp)->second;size_t pos = text.find(searchString); // 找到第一个匹配的位置// 循环替换所有匹配的内容text.replace(pos, searchString.length(), replacementString); // 用替换字符串替换匹配字符串return pos+replacementString.length()-1;}return -1;}
};

超出时间限制

测试用例通过了,但耗时太长。

方案3

最后的优化

class Solution {
public:string entityParser(string text) {string result = "";int i = 0;int n = text.length();while (i < n) {if (text[i] == '&') {if (text.substr(i, 6) == "&quot;") {result += "\"";i += 6;} else if (text.substr(i, 6) == "&apos;") {result += "'";i += 6;} else if (text.substr(i, 5) == "&amp;") {result += "&";i += 5;} else if (text.substr(i, 4) == "&gt;") {result += ">";i += 4;} else if (text.substr(i, 4) == "&lt;") {result += "<";i += 4;} else if (text.substr(i, 7) == "&frasl;") {result += "/";i += 7;} else {result += text[i];i++;}} else {result += text[i];i++;}}return result;}
};

执行用时分布 68ms 击败80.39%使用 C++ 的用户

消耗内存分布 18.54MB 击败35.29%使用 C++ 的用户

相关文章:

【Leetcode合集】1410. HTML 实体解析器

1410. HTML 实体解析器 1410. HTML 实体解析器 代码仓库地址&#xff1a; https://github.com/slience-me/Leetcode 个人博客 &#xff1a;https://slienceme.xyz 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 ""…...

04-React脚手架 集成Axios

初始化React脚手架 前期准备 1.脚手架: 用来帮助程序员快速创建一个基于xxx库的模板项目 1.包含了所有需要的配置&#xff08;语法检查、jsx编译、devServer…&#xff09;2.下载好了所有相关的依赖3.可以直接运行一个简单效果 2.react提供了一个用于创建react项目的脚手架库…...

时序预测 | MATLAB实现基于BiLSTM-AdaBoost双向长短期记忆网络结合AdaBoost时间序列预测

时序预测 | MATLAB实现基于BiLSTM-AdaBoost双向长短期记忆网络结合AdaBoost时间序列预测 目录 时序预测 | MATLAB实现基于BiLSTM-AdaBoost双向长短期记忆网络结合AdaBoost时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.Matlab实现BiLSTM-Adaboost…...

【nlp】3.6 Tansformer模型构建(编码器与解码器模块耦合)

Tansformer模型构建(编码器与解码器模块耦合) 1. 模型构建介绍2 编码器-解码器结构的代码实现3 Tansformer模型构建过程的代码实现4 小结1. 模型构建介绍 通过上面的小节, 我们已经完成了所有组成部分的实现, 接下来就来实现完整的编码器-解码器结构耦合. Transformer总体架…...

【【Linux系统下常用指令学习 之 二 】】

Linux系统下常用指令学习 之 二 文件查询和搜索 文件的查询和搜索也是最常用的操作&#xff0c;在嵌入式 Linux 开发中常常需要在 Linux 源码文件中查询某个文件是否存在&#xff0c;或者搜索哪些文件都调用了某个函数等等。 1、命令 find find 命令用于在目录结构中查找文件…...

Git-将指定文件回退到指定版本

场景1&#xff1a;修改了文件/path/to/file&#xff0c;没有提交&#xff0c;但是觉得改的不好&#xff0c;想还原。 解决&#xff1a; git checkout -- /path/to/file 场景2&#xff1a;修改了文件/path/to/file&#xff0c;已经提交&#xff0c;但是觉得改的不好&#xff0c…...

docker环境安装

环境 主机环境 1. 宿主机环境 ubuntu-22.04.3-live-server-amd64 &#xff0c;下载地址&#xff1a; https://mirrors.aliyun.com/ubuntu-releases/22.04.3/ubuntu-22.04.3-live-server-amd64.iso 2. apt 包管理器&#xff0c;镜像源修改 : 将 http://cn.archive.ubunt…...

【Java】智慧工地云平台源码(APP+SaaS模式)

在谈论“智慧工地”之前&#xff0c;我们首先得知道传统工地为什么跟不上时代了。 说起传统工地&#xff0c;总有一些很突出的问题&#xff1a;比如工友多且杂&#xff0c;他们是否入场、身体状况如何&#xff0c;管理人员只能依靠巡查、手工纪录来判断&#xff0c;耗时耗力&am…...

2016年11月10日 Go生态洞察:七年的Go语言旅程

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…...

深入了解Java中SQL优化的关键技巧与实践

引言 介绍SQL优化对于Java应用性能的重要性&#xff0c;并概述本文将要讨论的内容。 1. 编写高效的SQL语句 - **索引的类型与使用&#xff1a;** 解释B-Tree索引、哈希索引等类型的区别&#xff0c;以及如何根据查询需求合理创建和使用索引。 - **查询优化器&#xff1a;** 说明…...

6.3.WebRTC中的SDP类的结构

在上节课中呢&#xff0c;我向你介绍了sdp协议&#xff0c; 那这节课呢&#xff0c;我们再来看看web rtc中。是如何存储sdp的&#xff1f;也就是sdp的类结构&#xff0c;那在此之前呢&#xff1f;我们先对sdp的内容啊&#xff0c;做一下分类。因为在上节课中呢&#xff0c;虽然…...

ArcGis如何用点连线?

这里指的是根据已有坐标点手动连线&#xff0c;类似于mapgis中的“用点连线”&#xff0c;线的每个拐点是可以自动捕捉到坐标点的&#xff0c;比直接画精确。 我也相信这么强大的软件一定可以实现类似于比我的软件上坐标时自动生成的线&#xff0c;但是目前我还没接触到那里&a…...

自定义精美商品分类列表组件 侧边栏商品分类组件 category组件(适配vue3)

随着技术的发展&#xff0c;开发的复杂度也越来越高&#xff0c;传统开发方式将一个系统做成了整块应用&#xff0c;经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改&#xff0c;造成牵一发而动全身。通过组件化开发&#xff0c;可以有效实现单…...

造一个float类型二维矩阵,并将二维矩阵存快速储到一个float*中(memcpy)

// 创建并初始化一个二维数组 std::vector<std::vector<float>> createAndInitializeArray(int rows, int cols) {std::vector<std::vector<float>> array(rows, std::vector<float>(cols));float value 0.0f;for (int i 0; i < rows; i) {…...

python通过继承、组合、委托组织类

1 python通过继承、组合、委托组织类 #概念描述1继承属性查找X.name2多态方法调用X.method&#xff0c;取决于X的类型3封装方法和运算符实现行为 通常来说&#xff0c;独特的运算使用独特的方法名称&#xff0c;不要依赖于调用标记。 python组织类结构的方式包括&#xff1a…...

OSG粒子系统与阴影-自定义粒子系统示例<1>(4)

自定义粒子系统示例(一) 自定义粒子系统示例(一)的代码如程序清单11-5所示&#xff1a; /* 自定义粒子系统示例1 */ void particleSystem_11_5(const string &strDataFolder) {osg::ref_ptr<osgViewer::Viewer> viewer new osgViewer::Viewer();osg::ref_ptr<os…...

激活函数与其导数:神经网络中的关键元素

激活函数是神经网络中的重要组成部分&#xff0c;有力地推动了深度学习的发展。然而&#xff0c;仅仅了解和选择激活函数是不够的&#xff0c;我们还需要理解激活函数的导数。本文将详细介绍激活函数的概念、作用及其导数的重要性&#xff0c;并探究导数对神经网络训练的影响。…...

微信公众号对接获取用户openid预约项目心路全历程

公众号对接获取openid全历程 一、背景二、选型三、开始修改若依框架四、自己搭后端框架五、前端框架uni-app修改六、对接获取公众号登录用户openId七、总结 一、背景 老板接了朋友的一个公众号需求&#xff0c;要求做一个简单的疫苗预约系统。功能是获取当前登录用户&#xff0…...

大中小协作 共筑科学梦——华中科技大学附属花城中学举办首届科技节

为普及科学知识&#xff0c;张扬科学精神&#xff0c;创设浓郁的科学氛围&#xff0c;11月24日&#xff0c;华中科技大学附属花城中学举办了以“走近科学&#xff0c;触碰未来”为主题的首届科技节暨科创文化展示周活动。学生们在学习中感受科技的魅力&#xff0c;在“玩”中感…...

ElasticSearch之Health API

查看当前集群全部健康指标的信息&#xff0c;执行如下命令&#xff1a; curl -X GET "https://localhost:9200/_health_report?pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPHQBEs5*lo7F9"执行结果输出如下&#xff1a; {&quo…...

【逆向实战】从算法到驱动:剖析学生机房管理助手7.8的进程隐藏与设备管控机制

1. 学生机房管理助手7.8逆向分析实战 记得第一次在学生机房看到那个熟悉的蓝色图标时&#xff0c;我就知道又要和这个"老朋友"斗智斗勇了。学生机房管理助手7.8版本相比之前的7.5版本&#xff0c;最明显的变化就是进程名随机化算法的调整。用dnSpy反编译脱壳后的mai…...

树莓派5到手后第一件事:用Pi Imager v1.8.5烧录Raspberry Pi OS Bookworm的完整流程与隐藏功能

树莓派5到手后第一件事&#xff1a;用Pi Imager v1.8.5烧录Raspberry Pi OS Bookworm的完整流程与隐藏功能 树莓派5的发布让开发者们再次兴奋起来——更快的CPU、更强的GPU、更高的内存带宽&#xff0c;这些硬件升级意味着更流畅的多任务处理和更复杂的项目可能性。但无论硬件…...

从RSA加密到CTF竞赛:Miller-Rabin算法背后的‘信任’与‘欺骗’

从RSA加密到CTF竞赛&#xff1a;Miller-Rabin算法背后的‘信任’与‘欺骗’ 在数字世界的安全基石中&#xff0c;素数的神秘性始终扮演着关键角色。想象一下&#xff0c;当你在网上银行输入密码时&#xff0c;那些保护数据传输的加密算法&#xff0c;其安全性很大程度上依赖于一…...

Hunyuan-MT-7B真实案例:某边境县医院门诊处方双语打印系统输出

Hunyuan-MT-7B真实案例&#xff1a;某边境县医院门诊处方双语打印系统输出 1. 项目背景与需求 某边境县医院面临着特殊的语言服务需求。由于地处多民族聚居区&#xff0c;医院每天需要接待大量使用不同语言的患者。门诊处方需要同时使用汉语和当地少数民族语言打印&#xff0…...

Fish Speech 1.5在在线教育中的语音合成应用

Fish Speech 1.5&#xff1a;为在线教育注入“好声音” 你有没有想过&#xff0c;一节原本需要老师录制好几个小时的课程&#xff0c;现在只需要几分钟就能自动生成&#xff1f;或者&#xff0c;一个原本只有文字和图片的课件&#xff0c;突然有了一个亲切、专业的“声音”来为…...

一键体验GPT-SoVITS:Docker部署+语音合成实战教程

一键体验GPT-SoVITS&#xff1a;Docker部署语音合成实战教程 1. 为什么选择GPT-SoVITS进行语音合成 语音合成技术近年来取得了长足进步&#xff0c;但大多数开源项目要么需要大量训练数据&#xff0c;要么音质不够理想。GPT-SoVITS的出现改变了这一局面&#xff0c;它结合了G…...

Intv_AI_MK11在Ubuntu系统上的最佳实践:从安装到高性能部署

Intv_AI_MK11在Ubuntu系统上的最佳实践&#xff1a;从安装到高性能部署 1. 环境准备与系统初始化 在开始部署Intv_AI_MK11之前&#xff0c;我们需要确保Ubuntu系统已经做好充分准备。以下步骤适用于Ubuntu 20.04/22.04 LTS版本&#xff0c;建议使用服务器版以获得最佳性能。 …...

CSS如何解决栅格重叠问题_使用Grid-area明确划分元素占位

grid-area 未生效的主因是父容器未设置 display: grid&#xff1b;必须确保父元素声明 display: grid 或 inline-grid&#xff0c;且 grid-area 值与 grid-template-areas 中命名严格一致&#xff08;含引号、空格、换行&#xff09;&#xff0c;并用 DevTools 验证 computed 样…...

ChatGLM3-6B本地部署实测:RTX 4090D单卡支持8并发流式响应

ChatGLM3-6B本地部署实测&#xff1a;RTX 4090D单卡支持8并发流式响应 1. 项目概述 今天给大家分享一个让我眼前一亮的本地AI部署方案——基于ChatGLM3-6B-32k模型的智能对话系统。经过深度重构后&#xff0c;这个系统在RTX 4090D显卡上实现了8并发流式响应&#xff0c;真正做…...

《uni-app》Checkbox组件实战:从基础配置到跨平台表单交互

1. Checkbox组件基础入门 第一次接触uni-app的Checkbox组件时&#xff0c;我完全被它简洁的API设计惊艳到了。这个看似简单的复选框&#xff0c;在实际业务中却能发挥巨大作用。记得去年开发一个健身APP时&#xff0c;就用它实现了运动偏好选择功能&#xff0c;用户反馈特别好。…...