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

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è)
西城区| 宣化县| 石泉县| 田东县| 中山市| 即墨市| 阿拉善右旗| 吉木乃县| 同德县| 荥经县| 常州市| 高清| 旺苍县| 山阴县| 上饶县| 剑川县| 新绛县| 大埔县| 玛沁县| 昌平区| 科技| 项城市| 乐至县| 安多县| 阳曲县| 手游| 新沂市| 岢岚县| 正蓝旗| 通州区| 精河县| 万山特区| 新化县| 南丰县| 徐州市| 千阳县| 永州市| 武邑县| 江永县| 都安| 辰溪县|