1410-HTML 实体解析器

Raphael Liu Lv10

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

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

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

给你输入字符串 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 字符中的任意字符。

Problem: 1410. HTML 实体解析器

[TOC]

思路

时间22ms,击败92%。直接硬解了,遇到&就判断一下需不需要转换。一开始打算先使用map存储对应关系,但是需要多次查询,时间太久,就改成直接判断了,时间从2200ms降到了22ms。

复杂度

  • 时间复杂度:

    O(n)

  • 空间复杂度:

    O(n)

Code

[]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
class Solution {
public String entityParser(String text) {
int len = text.length();
StringBuilder sb = new StringBuilder();
int i = 0;
while(i < len){
char ch = text.charAt(i);
if(ch == '&'){
if(i + 4 <= len && text.substring(i,i + 4).equals("&gt;")){
sb.append(">");
i += 4;
continue;
}else if(i + 4 <= len && text.substring(i,i + 4).equals("&lt;")){
sb.append("<");
i += 4;
continue;
}else if(i + 5 <= len && text.substring(i,i + 5).equals("&amp;")){
sb.append("&");
i += 5;
continue;
}else if(i + 6 <= len && text.substring(i,i + 6).equals("&quot;")){
sb.append("\"");
i += 6;
continue;
}else if(i + 6 <= len && text.substring(i,i + 6).equals("&apos;")){
sb.append("'");
i += 6;
continue;
}else if(i + 7 <= len && text.substring(i,i + 7).equals("&frasl;")){
sb.append("/");
i += 7;
continue;
}
}
sb.append(ch);
i++;
}
return sb.toString();
}
}
 Comments
On this page
1410-HTML 实体解析器