括号匹配问题 栈c语言流程图_python训练题

括号匹配问题 栈c语言流程图_python训练题python实现括号匹配算法_Python实现括号匹配方法详解这篇文章主要简介了python实现括号匹配方法详解,文中通过示例代码简介的非常具体,对大家的学习或者工作具有一定的参考学习网上卖,需要的朋友可以学习下1.用一个栈【python中可

python实现括号匹配算法_Python实现括号匹配方法详解   这篇文章主要简介了python实现括号匹配方法详解,文中通过示例代码简介的非常具体,对大家的学习或者工作具有一定的参考学习网上卖,需要的朋友可以学习下   1.用一个栈【python中可以用List】就可以解决,时间和空间复杂度都是O(n)   # -*- coding: utf8 -*-   # 符号表   SYMBOLS = {‘}’: ‘{‘, ‘]’: ‘[‘, ‘)’: ‘(‘, ‘>’: ‘   SYMBOLS_L, SYMBOLS_R = SYMBOLS.values(), SYMBOLS.keys()   def check(s):   arr = []   for c in s:   if c in SYMBOLS_L:   # 左符号入栈   arr.append(c)   elif c in SYMBOLS_R:   # 右符号要么出栈,要么匹配失败   if arr and arr[-1] == SYMBOLS[c]:   arr.pop()   else:   return False   return True   print(check(“3 * {3 +[(2 -3) * (4+5)]}”))   print(check(“3 * {3+ [4 – 6}]”))   2.   # 存储左括号和右括号   open_brackets = ‘([{   close_brackets = ‘)]}>’   # 映射左右括号便于出栈判断   brackets_map = {‘)’: ‘(‘, ‘]’: ‘[‘, ‘}’: ‘{‘, ‘>’: ‘   # 对于每一行数据,进行如下判定若括号为左括号,加入栈,若括号为右括号,判断是否跟栈尾括号对应,   若对应,弹出栈尾素,若所有括号均正确闭合,则最后栈为空。   for row in rows:   stack = []   label = True   for char in row:   if char in open_brackets:   stack.append(char)   elif char in close_brackets:   if len(stack) < 1:   label = False   break   elif brackets_map[char] == stack[-1]:   stack.pop()   else:   label = False   break   else:   continue   if stack != []:   label = False   print(label)   rows = [   '([x[ ]{a}]{/}{t}g){x}[b][c[c]]{{h}}’,   '[/]{((x)({{*}*}w)w){f}{v}[%(^[z]{u}{ })([[ ]-]h)]{c}(*)[y]}’,   '<>[b]< >[[(c)u[v]{z>}]g][/b[(])v(v)(+)](v)’,   '[[b]][(v)g]([{{+}e}[*]d]g[[a] (v){b}]){a}[u]’]   3.   在长度很大的时候可以尽快判断一些比较明显的错误的项目,节省时间:   主要的思路:   首先设置两个列表分别存放的是种种括号的开括号和闭括号,然后遍历给定的字符串,分如下几种情况:   1.字符串 首字符 出现在闭括号列表中,直接结束,输出错误   2.字符串长度不为偶数,直接结束,输出错误   3.对原始字符串列表化去重,如果去重后的列表长度不为偶数直接结束,输出错误   4.遍历字符串,将属于开括号集合的括号加入到列表中,当遇上一个闭括号的时候计算该闭括号在闭括号列表中的索引与   当前列表最后一个开括号在开括号列表中的索引是否一致,一致则继续,否则直接结束,输出错误   #!usr/bin/env python   # encoding:utf-8   def bracket_mathch(one_str):   ””’   括号匹配   ”’   tmp_list = []   open_bracket_list = [‘(‘, ‘[‘, ‘{‘, ‘   close_bracket_list = [‘)’, ‘]’, ‘}’, ‘>’, ‘》’]   one_str_list = list(one_str)   length = len(one_str_list)   set_list = list(set(one_str_list))   num_list = [one_str_list.count(one) for one in set_list]   if one_str[0] in close_bracket_list:   return False   elif length % 2 != 0:   return False   elif len(set_list) % 2 != 0:   return False   else:   for i in range(length):   if one_str[i] in open_bracket_list:   tmp_list.append(one_str[i])   elif one_str[i] in close_bracket_list:   if close_bracket_list.index(one_str[i]) == open_bracket_list.index(tmp_list[-1]):   tmp_list.pop()   else:   return False   break   return True   if __name__ == ‘__main__’:   one_str_list = [‘({})’, ‘({[]})’, ‘[(]){}’, ‘{{{{{{‘, ‘([{}])’, ‘}{[()]’]   for one_str in one_str_list:   if bracket_mathch(one_str):   print(one_str, ‘正确’)   else:   print(one_str, ‘错误’)   tmp = ‘{}[{()()[]]]]]}}>}]’   print(bracket_mathch(tmp))   以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持乐购源码。

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/31274.html

(0)
上一篇 2024年 9月 11日 下午5:04
下一篇 2024年 9月 11日

相关推荐

关注微信