【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();
    }
}
🥦 运行结果

💬 共勉

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

相关推荐
潘多编程8 分钟前
Java中的状态机实现:使用Spring State Machine管理复杂状态流转
java·开发语言·spring
_阿伟_27 分钟前
SpringMVC
java·spring
代码在改了34 分钟前
springboot厨房达人美食分享平台(源码+文档+调试+答疑)
java·spring boot
wclass-zhengge1 小时前
数据结构篇(绪论)
java·数据结构·算法
何事驚慌1 小时前
2024/10/5 数据结构打卡
java·数据结构·算法
结衣结衣.1 小时前
C++ 类和对象的初步介绍
java·开发语言·数据结构·c++·笔记·学习·算法
TJKFYY1 小时前
Java.数据结构.HashSet
java·开发语言·数据结构
kylinxjd1 小时前
spring boot发送邮件
java·spring boot·后端·发送email邮件
OLDERHARD1 小时前
Java - MyBatis(上)
java·oracle·mybatis
杨荧1 小时前
【JAVA开源】基于Vue和SpringBoot的旅游管理系统
java·vue.js·spring boot·spring cloud·开源·旅游