Tag Validator

Given a string representing a code snippet, implement a tag validator to parse the code and return whether it is valid.

A code snippet is valid if all the following rules hold:

  • The code must be wrapped in a valid closed tag. Otherwise, the code is invalid.
  • A closed tag (not necessarily valid) has exactly the following format: <TAG_NAME>TAG_CONTENT</TAG_NAME>. Among them, <TAG_NAME> is the start tag, and </TAG_NAME> is the end tag. The TAG_NAME in start and end tags should be the same. A closed tag is valid if and only if the TAG_NAME and TAG_CONTENT are valid.
  • A valid TAG_NAME only contains upper-case letters, and has length in range [1, 9]. Otherwise, the TAG_NAME is invalid.
  • A valid TAG_CONTENT may contain other valid closed tags, cdata, and any characters except unmatched <, unmatched start and end tag, and unmatched or closed tags with invalid TAG_NAME. Otherwise, the TAG_CONTENT is invalid.
  • A start tag is unmatched if no end tag exists with the same TAG_NAME, and vice versa. However, you also need to consider the issue of unbalanced tags when tags are nested.
  • A < is unmatched if you cannot find a subsequent >. When you find a < or </, all the subsequent characters until the next > should be parsed as TAG_NAME (not necessarily valid).
  • The cdata has the following format: <![CDATA[CDATA_CONTENT]]>. The range of CDATA_CONTENT is defined as the characters between <![CDATA[ and the first subsequent ]]>.
  • CDATA_CONTENT may contain any characters. The function of cdata is to forbid the validator to parse CDATA_CONTENT, so even if it has some characters that can be parsed as a tag, no matter valid or invalid, you should treat it as regular characters.

Return whether the given code is valid.

Example 1
Inputcode = "<DIV>This is the first line <![CDATA[<div>]]></DIV>"
Outputtrue
The code is wrapped in a valid <DIV> closed tag, and its content consists of regular characters and cdata that should be treated as plain text.
Example 2
Inputcode = "<DIV>>> ![cdata[]] <![CDATA[<div>]>]]>]]>>]</DIV>"
Outputtrue
The code separates into the start tag <DIV>, valid tag content containing text and cdata ending at the first subsequent ]]>, and the matching end tag </DIV>.

Constraints

  • 1 <= code.length <= 500
  • code consists of English letters, digits, '<', '>', '/', '!', '[', ']', '.', and ' '.

Asked at 2 companies

</>

Your Solution

(Ctrl/Cmd + Enter)

Switching Language

Loading template...

Loading...

Sign in to save your progress

AI code evaluation

Get a correctness verdict, missed edge cases, and complexity analysis of your solution.

Sign in to evaluate