Tag Validator - Problem

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.
  • 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 when tags are nested.
  • A < is unmatched if you cannot find a subsequent >. And when you find a < or </, all the subsequent characters until the next > should be parsed as TAG_NAME.
  • 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.

Input & Output

Example 1 — Valid Simple Tag
$ Input: code = "<DIV>This is the first line <![CDATA[<div>]]></DIV>"
Output: true
💡 Note: The code is wrapped in a valid closed tag
. The tag name DIV is valid (uppercase, length 3). The content contains CDATA which is properly formatted.
Example 2 — Invalid Tag Name
$ Input: code = "<DIV>>> ![cdata[]] <![CDATA[<div>content</div>]]>></DIV>"
Output: false
💡 Note: The CDATA section is malformed - it should be but has extra characters.
Example 3 — No Wrapping Tag
$ Input: code = "<A> <B> </A> </B>"
Output: false
💡 Note: The tags are not properly nested. Tag B is opened inside A but closed after A is closed, violating proper nesting rules.

Constraints

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

Visualization

Tap to expand
Tag Validator: Input → Processing → Output<DIV>content<![CDATA[data]]></DIV>Input Code✓ Valid tag name: DIV✓ Proper nesting✓ CDATA handledValidation ProcesstrueValid CodeTag validation ensures proper XML-like structure with nesting and special sectionsRules: Valid tag names (A-Z, 1-9 chars), proper nesting, CDATA handling
Understanding the Visualization
1
Input Code
String with XML-like tags to validate
2
Parse Tags
Check tag names, nesting, and CDATA sections
3
Output Result
Return true if valid, false otherwise
Key Takeaway
🎯 Key Insight: Use a stack to track nested tag structure while treating CDATA as opaque content
Asked in
Google 15 Amazon 12
28.0K Views
Medium Frequency
~35 min Avg. Time
485 Likes
Ln 1, Col 1
Smart Actions
💡 Explanation
AI Ready
💡 Suggestion Tab to accept Esc to dismiss
// Output will appear here after running code
Code Editor Closed
Click the red button to reopen