給定乙個只包括 『(』,』)』,』』,』[』,』]』 的字串,判斷字串是否有效。
有效字串需滿足:
左括號必須用相同型別的右括號閉合。
左括號必須以正確的順序閉合。
注意空字串可被認為是有效字串。
字串知識點:string s:常見操作方法;
解法一:棧配對法 ;這是乙個有技術含量的演算法
定義res作為乙個棧
遍歷整個字串,將每個左括號加入res
當發現右括號時,就查棧頂元素:
若不是其對應的左括號,直接返回false;
若是,該元素出棧,檢查字串中下乙個元素;
class
solution
;// vector容器即可當做乙個棧空間,?只是來壓棧第乙個字元
int i ;
// 定義迴圈變數
int len=s.
length()
;// 字串長度
char c = s[0]
;// 移動接收字串
char cc;
//接收棧頂元素
if(len%2==
1)for(i=
0;i||c==
')')
else
}else}if
(ans.
back()
=='?'
)else}}
;
如果 c 是左括號,則入棧 pushpush;
否則通過雜湊表判斷括號對應關係,若 stack 棧頂出棧括號 stack.pop() 與當前遍歷括號 c 不對應,則提前返回 falsefalse。
class
solution
:def
isvalid
(self, s:
str)
->
bool
: dic =',
'[':
']',
'(':
')',
'?':
'?'}
stack =
['?'
]for c in s:
elif dic[stack.pop()]
!= c:
return
false
return
len(stack)
==1
既然要做這件事情,就要付出認真的態度來對待,不要幻想再看一遍,只是自我安慰而已;第一次就要努力做到最好; Leetcode刷題之括號
給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出 true 示例 3 輸入 輸出 false 示例 4 輸入 輸出 false 示例 5 輸入 輸...
leetcode刷題(51) 22 括號生成
給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 思路 只要有左括號就可以新增 class solution public void helper int left,int right,string str if left 0 ...
Leetcode刷題 有效的括號
思路 先把符號輸入字典,每對符號的左半邊設定為位置,右半邊設定為值,方便後續進行比對。利用出入棧的思想,設定棧stack,將字串中的值cpush入棧直至c不在字典裡。然後再將棧裡的值pop出來與c對比,注意此時pop出來的值是字典的位置索引dic stack.pop 所對應的值應該是符號的右半邊。如...