2021-09-18:給定一個只包括 ‘(‘,‘)‘,‘{‘,‘}‘,‘[‘

2021-09-18:給定一個只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字串 s ,判斷字串是否有效。有效字串需滿足:左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。

福大大 答案2021-09-18:

棧。遍歷字串,遇到左括號,入棧;遇到右括號,出棧。如果中途棧的元素個數小於0;或者遍歷完成,棧還有元素;或者元素不匹配,就返回false,否則返回true。

程式碼用golang編寫。程式碼如下:

package mainimport “fmt”func main() { ret := isValid(“{[]()}”) fmt。Println(ret)}func isValid(s string) bool { if len(s) == 0 { return true } str := []byte(s) N := len(str) stack := make([]byte, N) size := 0 for i := 0; i < N; i++ { cha := str[i] if cha == ‘(’ || cha == ‘[’ || cha == ‘{’ { stack[size] = twoSelectOne(cha == ‘(’, ‘)’, (twoSelectOne(cha == ‘[’, ‘]’, ‘}’))) size++ } else { if size == 0 { return false } size—— last := stack[size] if cha != last { return false } } } return size == 0}func twoSelectOne(c bool, a byte, b byte) byte { if c { return a } else { return b }}

執行結果如下:

2021-09-18:給定一個只包括 ‘(‘,‘)‘,‘{‘,‘}‘,‘[‘

***

[左神java程式碼](https://github。com/algorithmzuo/coding-for-great-offer/blob/main/src/class28/Problem_0020_ValidParentheses。java)