測試開發面試題解

  • 2020 年 1 月 22 日
  • 筆記

新書

速遞

吳老的java版《selenium webdriver3 實戰寶典》和python版《selenium Webdriver 3.0 自動化測試框架實戰指南》出版了,程式碼拿來就能用。

文 | 李興

題目描述

給定一個由括弧元素'(', ')','[':,']', '{', '}'組成的字元串,判斷該字元串中的所有類型的括弧是否是閉合的。

判斷條件:

(1)左括弧必須用相同類型的右括弧閉合

(2)左括弧必須以相同的順序閉合

示例:

輸入:() 輸出:true

輸入:()[]{} 輸出:true

輸入:(] 輸出:false

輸入:([)] 輸出:false

輸入:([{}]) 輸出:true

輸入:((())) 輸出:true

輸入:([[()()]{}]){}[] 輸出:true

解題分析一

通過觀察示例中的字元串發現,一個符合括弧閉合要求的字元串有如下特點:

(1)合理的嵌套關係

(2)嵌套的最內層是一對閉合的括弧類型(相鄰兩個元素),如()

首先將字元串string轉換成列表string_list,然後判斷列表string_list當中是否存在相鄰字元為閉合括弧的情況,如果存在就刪除這兩個字元,然後繼續判列表string_list當中是否存在相鄰字元為閉合括弧的情況。直到string_list為空,或者沒有可以刪除的元素為止。

如果string_list能夠刪除為空,為真,否則為假

此題的解法類似於我們玩的消消樂,如果能夠全部消除,則通關

演算法

def isClosedParentheses(string):     '''      判斷一個由括弧組成的字元串是否是閉合的     '''      d= {'(': ')', '[': ']', '{': '}'}     string_list = list(string)     while string_list:         for i in range(len(string_list)-1): # 獲取所有列表的下標             if string_list[i] in d.keys() and d[string_list[i]] == string_list[i +1]:# 找到閉合的括弧                  string_list.pop(i) # 先刪除閉合括弧的左邊,然後該下標右邊,下標左移                  string_list.pop(i) # 左移完成後,閉合括弧的右邊,左移到該下標繼續刪除                  break # 找到閉合括弧後退出本次循環         else:             break # for循環完成後退出while循環              #驗證列表是否全部刪除     if string_list:         return False     else:         return True

考點

1、列表元素刪除

2、for…else…語法結構

解題分析二

  1. 給出的括弧字元串,一定存在一對正確的括弧,如:(),[],{}
  2. 將這一對有效括弧清除掉,這對括弧外的括弧就成為中間成對出現的括弧,
  3. 這樣一直清除下去,這個字元串如果清除完畢就是True,否則為False

演算法

def isClosedParentheses(string):     '''      判斷一個由括弧組成的字元串是否是閉合的     '''     while '{}' in s or '()' in s or '[]' in s:             s = s.replace('{}', '')             s = s.replace('[]', '')             s = s.replace('()', '')         return s == ''