Leetcode1410. HTML 实体解析器
Every day a Leetcode
题目来源:1410. HTML 实体解析器
解法1:模拟
遍历字符串 text,每次遇到 ’&‘,就判断以下情况:
- 双引号:字符实体为 " ,对应的字符是 " 。
- 单引号:字符实体为 ' ,对应的字符是 ’ 。
- 与符号:字符实体为 & ,对应对的字符是 & 。
- 大于号:字符实体为 > ,对应的字符是 > 。
- 小于号:字符实体为 < ,对应的字符是 < 。
- 斜线号:字符实体为 ⁄ ,对应的字符是 / 。
如果是上述情况,将转换结果插入结果;如果都不是,则直接添加到结果里。
代码:
/** @lc app=leetcode.cn id=1410 lang=cpp** [1410] HTML 实体解析器*/// @lc code=start
class Solution
{
public:string entityParser(string text){string result;int i = 0;while (i < text.size()){if (text[i] == '&'){if (text.substr(i, 4) == ">"){result += '>';i += 4;}else if (text.substr(i, 4) == "<"){result += '<';i += 4;}else if (text.substr(i, 5) == "&"){result += '&';i += 5;}else if (text.substr(i, 6) == """){result += '"';i += 6;}else if (text.substr(i, 6) == "'"){result += '\'';i += 6;}else if (text.substr(i, 7) == "⁄"){result += '/';i += 7;}elseresult += text[i++];}elseresult += text[i++];}return result;}
};
// @lc code=end
结果:

复杂度分析:
时间复杂度:O(n),其中 n 是字符串 text 的长度。
空间复杂度:O(1)。
解法2:模拟
本题要求把字符串中所有的「字符实体」替换成对应的字符。
「字符实体」都是由 & 开头的,所以我们只需要遍历一遍字符串,用一个变量 pos\textit{pos}pos 表示当前处理的位置,如果 text[pos]=‘&’,就在这个位置进行探测。假设一个「字符实体」为 e,对应的字符为 c,那么可以通过判断 pos 位置开始,长度和 e 相同的子串是否和 e 相等,如果相等就可以替换。
代码:
class Solution {
public:using EntityChar = pair <string, char>;vector <EntityChar> entityList;string entityParser(string text) {entityList = vector({(EntityChar){""", '"'},(EntityChar){"'", '\''},(EntityChar){"&", '&'},(EntityChar){">", '>'},(EntityChar){"<", '<'},(EntityChar){"⁄", '/'}});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;}
};
结果:

复杂度分析:
时间复杂度:O(k×n),其中 n 是字符串 text 的长度。考虑最坏情况,每个位置都是 &,那么每个位置都要进行 6 次探测,探测的总时间代价和「实体字符」的总长度 k 相关,这里 k=6+6+5+4+4+7=32。
空间复杂度:O(k),这里用了 entityList 作为辅助变量,字符总数为 k+6,故渐进空间复杂度为 O(k+6)=O(k)。
相关文章:
Leetcode1410. HTML 实体解析器
Every day a Leetcode 题目来源:1410. HTML 实体解析器 解法1:模拟 遍历字符串 text,每次遇到 ’&‘,就判断以下情况: 双引号:字符实体为 " ,对应的字符是 " 。单引号&a…...
【Django使用】django经验md文档10大模块。第4期:Django数据库增删改查
Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以"插件"形式服务于整个框架,Django有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展…...
SAP LU04记账更改通知单创建转储单报错:L3094 记帐修改没有份存在
解决办法: 使用事务码LU02,修改过账更改状态,将过账更改状态改为U,强制关闭 1. LU04 查找记账更改通知单号 2. 事务码LU02修改状态 这个时候再用LU04去查看的时候,就不会再显示了...
Redis:Java客户端
前言 "在当今大数据和高并发的应用场景下,对于数据缓存和高效访问的需求日益增长。而Redis作为一款高性能的内存数据库,以其快速的读写能力和丰富的数据结构成为众多应用的首选。与此同时,Java作为广泛应用于企业级开发的编程语言&…...
使用electron工具打包web端到PC端应用程序
根据electron官网快速入门示例可以方便的构建mac端包,我们在此基础上构建windows端exe包. 1在package.json文件的script字段增加以下配置 "scripts": {..."build": "electron-builder --win"}, 2然后在终端执行以下命令 npm run b…...
Django框架环境的搭建(图文详解)
目录 day01 Web框架和Django基础 1.web框架底层 1.1 网络通信编辑 1.2 常见软件架构 1.3 手撸web框架 2.web框架 2.1 wsgiref 2.2 werkzeug 2.3 各框架的区别 3.快速上手django框架 3.1 安装 3.2 命令行 3.3 Pycharm 4.虚拟环境 4.1 创建虚拟环境 - 命令行 4…...
Java接口自动化测试系列[V1.0.0][概述]
基础知识 在TCP/IP中,HTTP属于传输层协议,该协议采用的是Request-Response的模式,且该协议是无状态的,也就是后续如果要用到前面的信息必须重新请求重新获取;HTTP通过SSL/TSL加密成为HTTPS,与HTTP相比HTTP…...
indexedDB存储
使用 setDBData({ id: name, value: 张三, expire: new Date().getTime() 10000 }, info, infoDB) console.log(getDBData(name, info, infoDB)); 添加或更新数据 async function setDBData(data,storeName "storeName",dbName "dbName",version ) {c…...
双向绑定与单向数据流之争,Solid会取代React吗
现在有一种观点声音逐渐大了起来,认为市面上出现了许多比 React 性能更好的框架,是不是意味着,React 将要被淘汰了? 谈谈我的看法,来做一个深入一点的分析 先说结论:Solid.js 要取代 React 很难 1 双向…...
Java --- JVM之垃圾回收相关知识概念
目录 一、System.gc() 二、内存溢出与内存泄漏 2.1、内存溢出 2.2、内存泄漏 三、Stop the world 四、垃圾回收的并行与并发 4.1、并发 4.2、并行 4.3、并行 vs 并发 4.4、垃圾回收的并发与并行 五、安全点与安全区域 5.1、安全点 5.2、安全区域 六、引用 6.1…...
单节点服务架构
单节点的服务架构: LNMP l:lilnux系统 n:nginx静态页面,转发动态请求 m:mysql数据库,后端服务器,保存用户和密码信息,以及论坛的信息 p:PHP,处理动态请求,动态请求转发数据库,然…...
Ubuntu Server download
前言 Ubuntu——公共云、数据中心和边缘上最受欢迎的 Linux 发行版。自成立以来,Ubuntu 一直在获得市场份额,截至今天已接近 50%。 Ubuntu Server download VersionUbuntu Server 其它主机型号版本Ubuntu AMD历史版下载百度云Ubuntu Server all Ubuntu…...
React 自定义hook 之 防抖和节流
一、简介 防抖和节流主要用于控制事件触发频率,提高页面性能和用户体验。 防抖: 当事件被触发后,在一定时间内有新的对应事件,则会取消老的事件执行。 节流: 当事件触发后,在一定时间内会忽略新的事件执行。 二、技术实现 1、us…...
CVE-2022-21661
简介 CVE-2022-21661是一个与WordPress相关的漏洞,涉及到SQL注入问题。该漏洞主要源于WordPress的WQ_Tax_Query类中的clean_query函数,可能允许攻击者通过控制传递给该函数的数据来控制生成的SQL查询,从而执行任意的SQL代码。 当WordPress的…...
【Python】tensorboard实时查看模型训练过程的方法示例
本文对tensorboard实时查看模型训练过程的方法进行实例详解,以帮助大家理解和使用。 步骤1:查看训练过程保存的文件中是否有这个文件,红框内的。 步骤2:如果有,则打开终端,激活安装过tensorboard的环境。…...
Golang基础-面向对象篇
文章目录 struct结构体类的表示与封装类的继承多态的基本要素与实现interface空接口反射变量的内置pairreflect包解析Struct TagStruct Tag在json中的应用 struct结构体 在Go语言中,可以使用type 关键字来创建自定义类型,这对于提高代码的可读性和可维护…...
全国的科技创新情况数据分享,涵盖2020-2022年三年情况
随着国家对科技创新的重视和大力支持,全国的科技创新情况越来越受到关注。 我们根据中国城市统计年鉴的这方面指标,分析汇总得出全国科技创新情况数据,需要说明的是,由于统计年鉴指标调整,每一年的数据并非字段相同&a…...
visionOS空间计算实战开发教程Day 1:环境安装和编写第一个程序
安装 截至目前visionOS还未在Xcode稳定版中开放,所以需要下载Xcode Beta版。比如我们可以下载Xcode 15.1 beta 2,注意Xcode 15要求系统的版本是macOS Ventura 13.5或更新,也就是说2017年的MacBook Pro基本可以勉强一战,基…...
java常见数值类型取值范围/ int short long BigInteger取值范围
文章目录 一、各类型取值范围 一、各类型取值范围 以下整理java中常用的数值类型取值范围。 类型字节大小最小值最大值取值范围byte8bit-128127-128到127short16bit-2 15 ^{15} 152 15 ^{15} 15-1-32768-32767int32bit-2 31 ^{31} 312 31 ^{31} 31 -1-2,147,483,648 到 2,147…...
echarts产品日常奇怪需求
设置最小刻度导致好多小数,限制两位 yAxis 指定的y轴设置 axisLabel,可以格式化显示 文档地址:https://echarts.apache.org/zh/option.html#yAxis.axisLabel.formatter yAxis: [{type: value,name: 利率,position: right,alignTicks: true,mi…...
手把手教你,如何一句话建立嵌入式闭环开发agent的工作流
上一篇介绍完10分钟安装好OpenCode,有的小伙伴下载不到安装的EXE,我已经上传我的资源了,大家可以直接下载 安装好opencode和Python后 1 在自己的电脑下建一个文件夹,名字随意 2 打开opencode添加文件夹作为工程的路径 3 输入提示词&#x…...
解放你的Dell G15:这款开源散热控制工具如何让游戏本重获新生
解放你的Dell G15:这款开源散热控制工具如何让游戏本重获新生 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 想象一下这样的场景:你正…...
从BUU靶场到真实项目:手把手教你用PHP预处理修复SQL注入漏洞(附完整代码)
从CTF靶场到生产环境:PHP预处理技术彻底解决SQL注入实战指南 登录功能作为Web应用的入口,其安全性直接影响整个系统。许多开发者通过CTF靶场(如BUU Ezsql)初次接触SQL注入漏洞,但往往难以将靶场经验转化为实际项目中的…...
Unity转微信小游戏,包体超20M别急着上CDN!我的字体、图片、音频压缩实战(附PS/格式工厂参数)
Unity转微信小游戏包体瘦身实战:从24.93MB压回20MB的终极技巧 当Unity项目转换为微信小游戏时,20MB的包体限制就像一道无形的门槛。最近我的一个项目打包后显示24.93MB,超出限制近5MB。面对这种情况,很多开发者的第一反应可能是考…...
如何3分钟将Android Studio变为中文界面:新手友好的完整汉化指南
如何3分钟将Android Studio变为中文界面:新手友好的完整汉化指南 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本) 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack 还在…...
亿级文件存储挑战:FastDFS元数据查询性能优化实战指南
亿级文件存储挑战:FastDFS元数据查询性能优化实战指南 【免费下载链接】fastdfs FastDFS is a high performance distributed file system (DFS). Its major functions include: file storing, file syncing and file accessing, and design for high capacity and …...
LangChain Memory
一、LangChain Memory 核心概念详解LangChain 的 Memory(记忆系统) 是让 Agent / 聊天机器人实现多轮对话、上下文理解、经验复用的核心模块,它解决了大模型「单轮对话、上下文窗口有限、跨会话失忆」的三大核心缺陷。1. 什么是 LangChain Me…...
Awesome-GPTs:开源社区驱动的GPT应用精选库与生态实践
1. 项目概述:一个汇聚全球智慧的GPT应用宝库 如果你和我一样,是个对AI应用充满好奇的探索者,那么你一定经历过这样的时刻:听说ChatGPT的GPTs功能很强大,能帮你写论文、做设计、学语言,甚至当你的私人教练&…...
超越基础教程:用VPI+Matlab实现高阶QAM相干光通信系统的DSP算法实战
超越基础教程:用VPIMatlab实现高阶QAM相干光通信系统的DSP算法实战 在光通信领域,高阶QAM(正交幅度调制)技术因其高频谱效率而备受关注。然而,随着调制阶数的提升,系统对信号处理算法的要求也呈指数级增长。…...
数据光合作用:软件测试从业者的专业视角
在碳中和时代,数据光合作用作为一种创新计算模式,正迅速崛起。它将植物光合作用过程转化为可量化、可分析的数据流,驱动AI模型和能源系统。对于软件测试从业者而言,这一领域带来了前所未有的挑战:如何确保生物数据采集…...
