c标签判断true false jsp_yiduobo的每日leetcode 591.标签验证器

本文详细介绍了如何解决LeetCode中的591.标签验证器问题,通过一趟扫描和栈的数据结构处理可能出现的标签套娃情况。作者分享了Python代码实现,并解释了关键步骤,包括处理CDATA、起始和结束标签以及普通字符的情况。通过这个解题过程,读者可以学习到字符串处理和栈的应用技巧。

12525ecf7ebf9e4cc94232dae138dded.png

祖传的手艺不想丢了,所以按顺序写一个leetcode的题解。计划每日两题,争取不卡题吧。

591.标签验证器https://leetcode-cn.com/problems/tag-validator/

看着题目描述一大堆,实际上还没有带括号的四则运算难做。

对于这类线性的可能出现套娃的字符串处理问题,一般就是一趟扫描判断各种情况,遇到套娃时则交个栈来处理。

具体对于这一题,有下面几种情况:

1、当前字符为'<',且下一个字符为'!':

此时为cdata的起始字符,因此可以寻找cdata的结束字符']]>'。

若找不到,说明是非法情况,返回false。

若能找到,那么就判断中间这一段是否包含字符串'[CDATA[',若不包含,说明是非法情况,返回false。若包含,那么说明这里出现了一串cdata,我们可以直接跳过这一段,接下来从']]>'的下一个字符继续往后扫描即可。

2、当前字符为'<',且下一个字符不是'!':

此时可能是起始标签<tag_name>,也可能是结束标签</tag_name>,或者是非法情况。那么我们首先判断下一个字符是否为'/',来确定当前标签是起始标签还是结束标签。

接下来,寻找第一个'>',若找不到,那么就是非法情况,返回false。找到第一个'>'之后,就可以确定tag_name是什么。判断其长度是否合法,同时扫描tag_name判断其中每个字符是否都是大写字符。若tag_name不合法,那么返回false。

检验完tag_name之后,若当前标签为起始标签,那么说明后续将出现一段tag_content,而这里是可能出现标签套娃的,因此需要将当前的tag_name压入栈中,然后继续往后处理。若当前标签为结束标签,那么就检测栈顶元素是否和当前的tag_name一致。如果不一致,说明tag匹配失败,返回false,否则将栈顶元素弹出,说明当前的标签是合法的闭合标签。

3、其他字符:

此时若栈为空,且之前出现过tag,说明当前字符出现在闭合标签之外,为非法情况,返回false。否则当前字符必然是tag_content中的一个字符,直接略过往后继续扫描即可。

为了处理这种情况,需要额外维护一个变量tag_flag,用来标记当前是否一个存在闭合标签。这个标签初始值为false,只有在情况2中,结束标签成功进行匹配时才能置为true。

扫描完成后,若栈非空,说明没有结束标签,返回false。若tag_flag为假,说明不存在闭合标签,返回false。若栈为空且tag_flag为真,才能返回true。

最后附上python代码:

class Solution(object):
    def isValid(self, code):
        """
        :type code: str
        :rtype: bool
        """

        l = len(code)
        pos = 0
        stack = []
        tag_flag = False
        if code[0] != '<':
            return False
        while pos < l:
            if not stack and tag_flag:
                return False
            if code[pos] == '<':
                if stack and pos + 1 < l and code[pos + 1] == '!':
                    cdata_right = code.find(']]>', pos + 2)
                    if cdata_right < 0:
                        return False
                    if code[pos + 2: cdata_right].find("[CDATA[") != 0:
                        return False
                    pos = cdata_right + 1
                else:
                    if pos + 1 < l and code[pos + 1] == '/':
                        tag_end = True
                        tag_name_left = pos + 2
                    else:
                        tag_end = False
                        tag_name_left = pos + 1
                    
                    tag_name_right = code.find('>', tag_name_left)
                    if tag_name_right < 0:
                        return False
                    tag_len = tag_name_right - tag_name_left 
                    if tag_len < 1 or tag_len > 9:
                        return False
                    for index in range(tag_name_left, tag_name_right):
                        if code[index] < 'A' or code[index] > 'Z':
                            return False
                    
                    if tag_end:
                        if not stack or stack[-1] != code[tag_name_left:tag_name_right]:
                            return False
                        stack.pop()
                    else:
                        tag_flag = True
                        stack.append(code[tag_name_left:tag_name_right])
                
                    pos = tag_name_right + 1
            else:
                pos += 1

        if stack:
            return False
        return tag_flag
内容概要:本文提出了一种基于非合作博弈理论的居民负荷分层调度模型,并结合双层鲸鱼优化算法(Two-level Whale Optimization Algorithm)进行高效求解,模型与算法均通过Matlab代码实现。研究针对电力系统中居民侧用电负荷的复杂调度问题,引入非合作博弈机制刻画各用户之间的利益竞争关系,实现负荷的分层优化分配;同时设计双层优化架构,上层优化资源配置,下层模拟用户自主决策行为,提升了模型的实用性与合理性。通过智能优化算法求解多层级、非凸非线性的博弈模型,有效提高了调度方案的收敛性与全局寻优能力,适用于现代智能电网中的需求侧管理与能源优化场景。; 适合人群:具备电力系统基础理论知识和Matlab编程能力,从事智能电网、能源优化调度、需求侧管理、博弈论应用等方向的科研人员、高校研究生及工程技术人员。; 使用场景及目标:①应用于居民区电力负荷的分层优化调度系统设计与仿真分析;②为非合作博弈在多主体能源系统建模中的应用提供方法论支持;③利用双层鲸鱼算法解决具有嵌套结构的复杂双层优化问题,提升求解效率与调度方案的可行性。; 阅读建议:建议读者结合提供的Matlab代码深入理解模型构建逻辑与算法实现流程,重点关注博弈模型的效用函数设计、纳什均衡求解思路以及双层优化结构的迭代机制,宜配合实际用电数据开展复现实验以验证模型有效性与鲁棒性。
内容概要:本文围绕基于自适应神经模糊推理系统(ANFIS)智能控制器的可再生能源微电网功率管理系统展开研究,结合Simulink仿真实现,深入探讨了微电网中功率的智能调控与经济机组组合调度问题。通过引入ANFIS控制器,有效应对风能、光伏等可再生能源出力的波动性与不确定性,提升系统运行的稳定性与电能质量。研究内容涵盖微电网多源协调控制策略、功率平衡管理、优化调度模型构建及仿真验证,实现了对分布式电源、储能系统和负荷的协同优化,兼顾经济性与可靠性目标,并通过仿真平台验证了所提方法的有效性与优越性。; 适合人群:具备电力系统、自动化或新能源相关专业背景,熟悉Matlab/Simulink仿真环境,从事微电网能量管理、智能控制、能源优化等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于高比例可再生能源接入场景下的微电网能量管理系统研发与教学实践;②为实现微电网功率稳定控制与经济高效运行提供先进的智能控制解决方案;③支撑高水平学术论文复现、科研课题攻关及实际工程项目的仿真验证与方案优化。; 阅读建议:建议结合提供的Simulink模型与相关代码进行动手实践,重点关注ANFIS控制器的设计流程、规则库构建与参数调优方法,并通过与传统PID或MPC控制策略的对比实验,深入理解其在动态响应与鲁棒性方面的优势。同时可进一步拓展文中提出的优化调度逻辑,应用于多目标、多约束的复杂实际应用场景中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值