class Solution {
public:
bool isValid(string code)
{
if(code.size() < 6)
return false;
if(code[0] != '<' ||code[code.size() - 1] != '>')
return false;
stack<string> temp;
string s;
for(int i = 0;i < code.size();i++)
{
if(code[i] == '<' && code[i + 1] != '!')
{
int pos = code.find('>',i);
if(code[i + 1] == '/')
{
s = code.substr(i + 2,pos - i - 2);
if(temp.empty())
return false;
else if(temp.top() != s)
return false;
else
{
temp.pop();
if(temp.empty() && pos != code.size() - 1)
return false;
}
}
else
{
s = code.substr(i + 1,pos - i - 1);
if(s.size() > 9 ||s.size() < 1)
return false;
for(int i = 0;i < s.size();i++)
{
if(s[i] > 'Z' || s[i] <'A')
return false;
}
temp.push(s);
}
i = pos;
continue;
}
else if(code[i] == '<')
{
if(temp.empty())
return false;
if(code.substr(i + 1,8) == "![CDATA[")
{
int pos = code.find("]]>", i);
if(pos == -1)
return false;
else
i = pos;
}
else
return false;
continue;
}
if(i == code.size() - 1)
return false;
}
if(temp.empty())
return true;
else
return false;
}
};
ps:感觉像是纸老虎,不过有两情况一开始没考虑到,后面加的。