測試開發面試題 判斷給定的字串中是否為閉合的括號

2021-10-01 08:22:30 字數 3020 閱讀 1037

目錄

題目描述

解題思路一

演算法過程:

**示例:

解題思路二

演算法過程:

**示例:

解題思路三

演算法過程:

**示例:

給定乙個由括號元素'(', ')','[':,']', ''組成的字串,判斷該字串中的所有型別的括號是否是閉合的。

判斷條件:

左括號必須用相同型別的右括號閉合

左括號必須以相同的順序閉合

示例:

輸入:()                輸出:true

輸入:(){}             輸出:true

輸入:(]               輸出:false

輸入:([)]              輸出:false

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

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

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

基於下標重複遍歷的方式,找到一對閉合的括號就刪除,從頭開始遍歷,直到原字串為空或者不再有閉合的括號為止。

將傳入的字串引數string轉換成列表string_list,這樣可以進行刪除操作;

按下標遍歷列表string_list,判斷當前索引和下乙個索引中的元素是否為一對閉合的括號(也就是(),或者{}),如果有就刪除這對閉合的括號,退出此次迴圈,從頭重新開始遍歷;

重複步驟2,直到列表string_list為空,或者遍歷完列表string_list後沒有閉合的括號為止;

判斷列表string_list,如果為空,則返回true,否則返回false。

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

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) # 先刪除閉合的左括號,刪除完成後索引i的元素即為右括號

string_list.pop(i) # 再刪除閉合的右括號

break # 找到閉合括號後退出本次迴圈

else:

break # for迴圈完成後退出while迴圈

# 驗證列表是否全部刪除

if string_list:

return false

else:

return true

和思路一類似,也是成對的刪除閉合的括號,但是刪除的方式採用的是字串的replace方法,**更簡潔。

給出的括號字串,一定存在一對正確的括號,如:(),,{};

將這一對有效括號用空字元替換掉,這對括號外的括號就成為中間成對出現的括號;

重複步驟2一直替換下去;

全部替換後,判斷字串如果為空就返回true,否則返回false

def isclosedparentheses(s):

'''判斷乙個由括號組成的字串是否是閉合的

'''while '{}' in s or '()' in s or '' in s:

s = s.replace('{}', '')

s = s.replace('', '')

s = s.replace('()', '')

return s == ''

基於棧的思想實現,如果是左括號比如「(」,」[「或者」「並且和棧中最上面的元素是一對的話就出棧,遍歷完成後棧為空就返回true,否則返回false

定義乙個字典儲存括號的對映關係;

遍歷傳入的字串s;如果是字典的某乙個key就將其新增到列表symbol_list最後;如果是和列表symbol_list中最後乙個括號匹配的右括號的話就刪除symbol_list列表中最後乙個元素;否則的話就直接返回false;

全部遍歷完成後,判斷列表symbol_list,如果為空就返回true,否則返回false

def isclosedparentheses(s):

if len(s)>0 and len(s)%2 !=0:return false

symbol_list =

symbol_dict = ','[':']'}#用字典儲存括號的對映關係

for i in s:#遍歷給定的字串

if i in symbol_dict:#如果是字典的某乙個key就將其新增到列表symbol_list中

#如果是和列表symbol_list中最後乙個括號匹配的右括號的話就出棧

elif i in symbol_dict.values() and i == symbol_dict[symbol_list[-1]]:

symbol_list.pop()

#既不是左括號,也不和列表symbol_list中最後乙個括號匹配的話直接返回false

else:

return false

#print(symbol_list)

# 列表symbol_list為空說明是閉合的返回true,否則返回false

return symbol_list ==

測試開發面試題

4分 3 弱網測試時應該關注的情形有 4分 4 安卓系統架構分為哪幾層?4分 5 記憶體的vss是指 rss是指 pss是指 uss是指 4分 二 簡答題 6 您認為在測試人員同開發人員的溝通過程中,如何提高溝通的效率和改善溝通的效果?維持測試人員同開發團隊中其他成員良好的人際關係的關鍵是什麼?5分...

keep測試開發面試題

1 自我介紹 2 專案的功能測試是怎麼做的 說了一堆黑盒測試的方法 3 談了談自動化測試的框架,詢問怎麼獲取乙個request,並根據header值返回response 手寫 這裡問了很多亂七八糟的,有些連聽都沒聽清楚,完全問懵了qwq 4 200 204 302 404 500 這幾個碼的含義 5...

百度測試開發面試題

學姐 學長總結的面試題 感謝學姐 針對質量部測試開發 1.幾種常見演算法看下,能夠大概描述出來演算法的過程,複雜度 排序 查詢等 2.給你設定幾種場景,讓你解答 比如給你兩部手機,讓你站在一百層樓高的地方,假設在第 n層手機摔下就會摔破,問你怎樣用著兩部手機確定這個臨界層。場景測試 3.怎樣知道乙個...