<p><strong>HTML entity parser</strong> is the parser that takes HTML code as input and replace all the entities of the special characters by the characters itself.</p>

<p>The special characters and their entities for HTML are:</p>

<ul>
	<li><strong>Quotation Mark:</strong> the entity is <code>&amp;quot;</code> and symbol character is <code>&quot;</code>.</li>
	<li><strong>Single Quote Mark:</strong> the entity is <code>&amp;apos;</code> and symbol character is <code>&#39;</code>.</li>
	<li><strong>Ampersand:</strong> the entity is <code>&amp;amp;</code> and symbol character is <code>&amp;</code>.</li>
	<li><strong>Greater Than Sign:</strong> the entity is <code>&amp;gt;</code> and symbol character is <code>&gt;</code>.</li>
	<li><strong>Less Than Sign:</strong> the entity is <code>&amp;lt;</code> and symbol character is <code>&lt;</code>.</li>
	<li><strong>Slash:</strong> the entity is <code>&amp;frasl;</code> and symbol character is <code>/</code>.</li>
</ul>

<p>Given the input <code>text</code> string to the HTML parser, you have to implement the entity parser.</p>

<p>Return <em>the text after replacing the entities by the special characters</em>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> text = &quot;&amp;amp; is an HTML entity but &amp;ambassador; is not.&quot;
<strong>Output:</strong> &quot;&amp; is an HTML entity but &amp;ambassador; is not.&quot;
<strong>Explanation:</strong> The parser will replace the &amp;amp; entity by &amp;
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> text = &quot;and I quote: &amp;quot;...&amp;quot;&quot;
<strong>Output:</strong> &quot;and I quote: \&quot;...\&quot;&quot;
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= text.length &lt;= 10<sup>5</sup></code></li>
	<li>The string may contain any possible characters out of all the 256 ASCII characters.</li>
</ul>

class Solution {
public:
    void rmv(string &s, int l) {
        while (l) {
            l --;
            s.pop_back();
        }
    }
    string entityParser(string text) {
       int N = (int)text.size();
       string parsedText = "";
       for (int i = 0; i < N; i ++) {
            parsedText += text[i];
            if (parsedText.back() == ';') {
                if (i >= 3) {
                    string entity = text.substr(i - 3, 4);
                    if (entity == "&gt;") {
                        rmv(parsedText, 4);
                        parsedText += '>';
                    } else if (entity == "&lt;") {
                        rmv(parsedText, 4);
                        parsedText += '<';
                    } else if (i >= 4) {
                        entity = text.substr(i - 4, 5);
                        if (entity == "&amp;") {
                            rmv(parsedText, 5);
                            parsedText += '&';
                        } else if (i >= 5) {
                            entity = text.substr(i - 5, 6);
                            if (entity == "&quot;") {
                                rmv(parsedText, 6);
                                parsedText += '"';
                            } else if (entity == "&apos;") {
                                rmv(parsedText, 6);
                                parsedText += "'";
                            } else if (i >= 6) {
                                entity = text.substr(i - 6, 7);
                                if (entity == "&frasl;") {
                                    rmv(parsedText, 7);
                                    parsedText += "/"; 
                                }
                            }
                        }
                    }
                }
            }
       }
       return parsedText;
    }
};
21600