【LeetCode:1410. HTML 实体解析器 | 模拟+哈希表+字符串+库函数】

|-----------|
| 🚀 算法题 🚀 |

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域新星创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

|-----------|
| 🚀 算法题 🚀 |

🍔 目录

    • [🚩 题目链接](#🚩 题目链接)
    • [⛲ 题目描述](#⛲ 题目描述)
    • [🌟 求解思路&实现代码&运行结果](#🌟 求解思路&实现代码&运行结果)
      • [⚡ 字符串处理+库函数](#⚡ 字符串处理+库函数)
        • [🥦 求解思路](#🥦 求解思路)
        • [🥦 实现代码](#🥦 实现代码)
        • [🥦 运行结果](#🥦 运行结果)
      • [⚡ 模拟+哈希表+字符串](#⚡ 模拟+哈希表+字符串)
        • [🥦 求解思路](#🥦 求解思路)
        • [🥦 实现代码](#🥦 实现代码)
        • [🥦 运行结果](#🥦 运行结果)
    • [💬 共勉](#💬 共勉)

🚩 题目链接

⛲ 题目描述

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

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

双引号:字符实体为 " ,对应的字符是 " 。

单引号:字符实体为 ' ,对应的字符是 ' 。

与符号:字符实体为 & ,对应对的字符是 & 。

大于号:字符实体为 > ,对应的字符是 > 。

小于号:字符实体为 < ,对应的字符是 < 。

斜线号:字符实体为 ⁄ ,对应的字符是 / 。

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

示例 1:

输入:text = "& is an HTML entity but &ambassador; is not."

输出:"& is an HTML entity but &ambassador; is not."

解释:解析器把字符实体 & 用 & 替换

示例 2:

输入:text = "and I quote: "...""

输出:"and I quote: "...""

示例 3:

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

输出:"Stay home! Practice on Leetcode 😃"

示例 4:

输入:text = "x > y && x < y is always false"

输出:"x > y && x < y is always false"

示例 5:

输入:text = "leetcode.com⁄problemset⁄all"

输出:"leetcode.com/problemset/all"

提示:

1 <= text.length <= 10^5

字符串可能包含 256 个ASCII 字符中的任意字符。

🌟 求解思路&实现代码&运行结果


⚡ 字符串处理+库函数

🥦 求解思路
  1. 直接调用replaceAll的替换函数,但是需要注意一点的是,"&"替换"&"要放到最后进行,如果之前替换了,那么很有可能替换后的"&"与其它的单词组成要可以继续替换的单词,继续进行替换,从而最终的结果发生改变。
  2. 具体实现代码如下:
🥦 实现代码
java 复制代码
class Solution {
    public String entityParser(String text) {
        text=text.replaceAll("&quot;","\"");
        text=text.replaceAll("'","'");
        text=text.replaceAll("&gt;",">");
        text=text.replaceAll("&lt;","<");
        text=text.replaceAll("&frasl;","/");
        text=text.replaceAll("&amp;","&");
        return text;
    }
}
🥦 运行结果

⚡ 模拟+哈希表+字符串

🥦 求解思路
  1. 提前通过Hash表记录替换的映射,模拟遍历,从"&"开始,";'"结束,找到要被替换的单词,通过映射表返回替换的单词,最后通过StringBuilder进行快速拼接。
  2. 具体实现代码如下:
🥦 实现代码
java 复制代码
class Solution {
    public String entityParser(String text) {
        HashMap<String,String> map=new HashMap<>(){{
            put("&quot;", "\"");
            put("'", "'");
            put("&amp;", "&");
            put("&gt;", ">");
            put("&lt;", "<");
            put("&frasl;", "/");
        }};
        int n=text.length();
        StringBuilder sb=new StringBuilder();
        for(int i=0;i<n;i++){
            char c=text.charAt(i);
            if(c=='&'){
                int start=i;
                while(i<n&&text.charAt(i)!=';') i++;
                String str=text.substring(start,Math.min(i+1,n));
                if(map.containsKey(str)){
                    sb.append(map.get(str));
                }else{
                    i=start;
                    sb.append(c);
                }
            }else{
                sb.append(c);
            }
        }
        return sb.toString();
    }
}
🥦 运行结果

💬 共勉

|----------------------------------|
| 最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉! |

相关推荐
哦虎!4 小时前
【JavaEE】网络初识
java
for_ever_love__4 小时前
MySQL ORDER BY 排序优化:从 Using filesort 到索引有序扫描(含双路 / 单路排序原理)
java·mysql·优化·存储·by·order·filesort
我是人✓5 小时前
Java文件上传三方式对比:从传统到SpringBoot
java·开发语言
欣栀♡5 小时前
JVM 频繁 Full GC 先看日志括号里的 cause,jstat 的 FGC 在 JDK 8 上会骗人
java·jvm
Navigator_Z5 小时前
LeetCode //C - 1289. Minimum Falling Path Sum II
c语言·算法·leetcode
IT研究室5 小时前
最新计算机毕业设计选题推荐-基于spring boot的葡萄酒文化宣传网站-网站-文档指导-Java-springboot
java·spring boot·课程设计
慧都小项5 小时前
MyEclipse 中创建和测试 JAX-RS REST 接口:从项目配置到 REST Explorer
java·restful·myeclipse·jax-rs
Wang's Blog5 小时前
Java 项目实战: 交友项目 - 入门案例:编写 Dubbo 服务提供者
java·dubbo·交友
mmmmath_36 小时前
LeetCode.104.二叉树的最大深度
数据结构·leetcode
秋饼6 小时前
Spring AI 2.0 结构化输出企业级实战:从 BeanOutputConverter 源码到生产级解析容错
java·ai·技术分享·后端开发