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

在这里插入图片描述

算法题

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

算法题

在这里插入图片描述

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

目录

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

题目链接

  • 1410. HTML 实体解析器

⛲ 题目描述

「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. 具体实现代码如下:
实现代码
class Solution {
    public String entityParser(String text) {
        text=text.replaceAll(""","\"");
        text=text.replaceAll("'","'");
        text=text.replaceAll(">",">");
        text=text.replaceAll("<","<");
        text=text.replaceAll("⁄","/");
        text=text.replaceAll("&","&");
        return text;
    }
}
运行结果

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

⚡ 模拟+哈希表+字符串

求解思路
  1. 提前通过Hash表记录替换的映射,模拟遍历,从"&“开始,”;'"结束,找到要被替换的单词,通过映射表返回替换的单词,最后通过StringBuilder进行快速拼接。
  2. 具体实现代码如下:
实现代码
class Solution {
    public String entityParser(String text) {
        HashMap<String,String> map=new HashMap<>(){{
            put(""", "\"");
            put("'", "'");
            put("&", "&");
            put(">", ">");
            put("<", "<");
            put("⁄", "/");
        }};
        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();
    }
}
运行结果

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


共勉

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

在这里插入图片描述

你可能感兴趣的:(LeetCode每日一题打卡,leetcode,html,散列表,hashmap,java,模拟,字符串)