栈学习-------标签验证器

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:感觉像是纸老虎,不过有两情况一开始没考虑到,后面加的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值