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
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
💡
Explanation
AI Ready
💡 Suggestion
Tab
to accept
Esc
to dismiss
// Output will appear here after running code