-
Notifications
You must be signed in to change notification settings - Fork 29
/
Copy pathNo1410.html-entity-parser.cs
74 lines (72 loc) · 2.54 KB
/
No1410.html-entity-parser.cs
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/*
* Difficulty:
* Medium
*
* Desc:
* HTML entity parser is the parser that takes HTML code as input and replace all the entities of the special characters by the characters itself.
*
* The special characters and their entities for HTML are:
* - Quotation Mark: the entity is " and symbol character is ".
* - Single Quote Mark: the entity is ' and symbol character is '.
* - Ampersand: the entity is & and symbol character is &.
* - Greater Than Sign: the entity is > and symbol character is >.
* - Less Than Sign: the entity is < and symbol character is <.
* - Slash: the entity is ⁄ and symbol character is /.
*
* Given the input text string to the HTML parser, you have to implement the entity parser.
* Return the text after replacing the entities by the special characters.
*
* Example 1:
* Input: text = "& is an HTML entity but &ambassador; is not."
* Output: "& is an HTML entity but &ambassador; is not."
* Explanation: The parser will replace the & entity by &
*
* Example 2:
* Input: text = "and I quote: "...""
* Output: "and I quote: \"...\""
*
* Example 3:
* Input: text = "Stay home! Practice on Leetcode :)"
* Output: "Stay home! Practice on Leetcode :)"
*
* Example 4:
* Input: text = "x > y && x < y is always false"
* Output: "x > y && x < y is always false"
*
* Example 5:
* Input: text = "leetcode.com⁄problemset⁄all"
* Output: "leetcode.com/problemset/all"
*
* Constraints:
* 1 <= text.length <= 10^5
* The string may contain any possible characters out of all the 256 ASCII characters.
*/
public class Solution {
public string EntityParser(string text) {
List<string> arr = new List<string>();
Dictionary<string, string> dict = new Dictionary<string, string>() {
{ """, "\"" },
{ "'", "'" },
{ "&", "&" },
{ ">", ">" },
{ "<", "<" },
{ "⁄", "/" }
};
int i = 0;
while (i < text.Length) {
if (text[i] == '&') {
int j = i;
while (i < text.Length && text[i] != ';') i += 1;
if (dict.ContainsKey(text.Substring(j, i - j + 1))) {
arr.Add(dict[text.Substring(j, i - j + 1)]);
} else {
arr.Add(text.Substring(j, i - j + 1));
}
} else {
arr.Add(text[i].ToString());
}
i += 1;
}
return string.Join("", arr);
}
}