成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Python如何實(shí)現(xiàn)的括號(hào)匹配判斷功能-創(chuàng)新互聯(lián)

小編給大家分享一下Python如何實(shí)現(xiàn)的括號(hào)匹配判斷功能,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

在興化等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需規(guī)劃網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),成都全網(wǎng)營(yíng)銷,成都外貿(mào)網(wǎng)站制作,興化網(wǎng)站建設(shè)費(fèi)用合理。

1.用一個(gè)?!緋ython中可以用List】就可以解決,時(shí)間和空間復(fù)雜度都是O(n)

# -*- coding: utf8 -*-
# 符號(hào)表
SYMBOLS = {'}': '{', ']': '[', ')': '(', '>': '<'}
SYMBOLS_L, SYMBOLS_R = SYMBOLS.values(), SYMBOLS.keys()
def check(s):
 arr = []
 for c in s:
  if c in SYMBOLS_L:
   # 左符號(hào)入棧
   arr.append(c)
  elif c in SYMBOLS_R:
   # 右符號(hào)要么出棧,要么匹配失敗
   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}]"))

運(yùn)行結(jié)果:

True
False

2.

# -*- coding: utf8 -*-
# 存儲(chǔ)左括號(hào)和右括號(hào)
open_brackets = '([{<'
close_brackets = ')]}>'
# 映射左右括號(hào)便于出棧判斷
brackets_map = {')': '(', ']': '[', '}': '{', '>': '<'}
# 對(duì)于每一行數(shù)據(jù),進(jìn)行如下判定若括號(hào)為左括號(hào),加入棧,若括號(hào)為右括號(hào),判斷是否跟棧尾括號(hào)對(duì)應(yīng),
# 若對(duì)應(yīng),彈出棧尾元素,若所有括號(hào)均正確閉合,則最后棧為空。
rows = [
'([<^>x[ ]{a}]{/}{t}g<^>)<{x}b>{x}<z({%}w >[b][c[c]]{<h>{h}}',
 '[/]{((x)({{*}*}w)w){f}{v}[%(^[z]{u}{ })([[ ]-]h)]{c}(*)[y]}',
 '<<(^)z>>[b]< >[[(c)u[v]{z<b< >><b>}]g][/b[(])v(v)(+)](v)',
 '[[b]][(v)g]<z>([{{<->+}e}[*]d<+>]g[[a] <+>(v)<e>]){a}[u]']
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)

運(yùn)行結(jié)果:

False
True
False
True

3.

在長(zhǎng)度很大的時(shí)候可以盡快判斷一些比較明顯的錯(cuò)誤的模式,節(jié)省時(shí)間:

主要的思路:

首先設(shè)置兩個(gè)列表分別存放的是各種括號(hào)的開括號(hào)和閉括號(hào),然后遍歷給定的字符串,分如下幾種情況:

  1. 字符串 首字符 出現(xiàn)在閉括號(hào)列表中,直接結(jié)束,輸出錯(cuò)誤

  2. 字符串長(zhǎng)度不為偶數(shù),直接結(jié)束,輸出錯(cuò)誤

  3. 對(duì)原始字符串列表化去重,如果去重后的列表長(zhǎng)度不為偶數(shù)直接結(jié)束,輸出錯(cuò)誤

  4. 遍歷字符串,將屬于開括號(hào)集合的括號(hào)加入到列表中,當(dāng)遇上一個(gè)閉括號(hào)的時(shí)候計(jì)算該閉括號(hào)在閉括號(hào)列表中的索引與當(dāng)前列表最后一個(gè)開括號(hào)在開括號(hào)列表中的索引是否一致,一致則繼續(xù),否則直接結(jié)束,輸出錯(cuò)誤

#!usr/bin/env python
# encoding:utf-8
def bracket_mathch(one_str):
 '''''
 括號(hào)匹配
 '''
 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, '錯(cuò)誤')
 tmp = '{}[{()()[]<{{[[[[(())()()(){}[]{}[]()<>]]]]}}>}]'
 print(bracket_mathch(tmp))

運(yùn)行結(jié)果:

('({})', '\xe6\xad\xa3\xe7\xa1\xae')
('({[<\xe3\x80\x8a\xe3\x80\x8b>]})', '\xe6\xad\xa3\xe7\xa1\xae')
('[(]){}', '\xe9\x94\x99\xe8\xaf\xaf')
('{{{{{{', '\xe9\x94\x99\xe8\xaf\xaf')
('([{}])', '\xe6\xad\xa3\xe7\xa1\xae')
('}{[()]', '\xe9\x94\x99\xe8\xaf\xaf')
True

以上是“Python如何實(shí)現(xiàn)的括號(hào)匹配判斷功能”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

網(wǎng)站題目:Python如何實(shí)現(xiàn)的括號(hào)匹配判斷功能-創(chuàng)新互聯(lián)
瀏覽路徑:http://jinyejixie.com/article8/dhdiop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、企業(yè)建站、網(wǎng)站設(shè)計(jì)公司、外貿(mào)建站、關(guān)鍵詞優(yōu)化、電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)
全椒县| 丰都县| 邵阳县| 扶绥县| 海门市| 廉江市| 澄迈县| 兖州市| 北票市| 清苑县| 济源市| 汤原县| 大厂| 凤山县| 南康市| 公主岭市| 遵化市| 重庆市| 梨树县| 旬阳县| 元氏县| 安仁县| 铜川市| 巴林右旗| 临夏县| 吴桥县| 句容市| 宜阳县| 湖南省| 织金县| 忻城县| 南江县| 溆浦县| 铅山县| 绥棱县| 正镶白旗| 鄂伦春自治旗| 三原县| 武城县| 苏尼特左旗| 讷河市|