力扣20 有效地括號(簡單)

2021-10-14 01:21:05 字數 2190 閱讀 8816

給定乙個只包括 『(』,』)』,』』,』[』,』]』 的字串,判斷字串是否有效。

有效字串需滿足:

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

左括號必須以正確的順序閉合。

注意空字串可被認為是有效字串。

示例 1:

輸入: 「()」

輸出: true

示例 2:

輸入: 「(){}」

輸出: true

示例 3:

輸入: 「(]」

輸出: false

示例 4:

輸入: 「([)]」

輸出: false

示例 5:

輸入: 「」

輸出: true

思路:棧

解題思路:

演算法原理

棧先入後出特點恰好與本題括號排序特點一致,即若遇到左括號入棧,遇到右括號時將對應棧頂左括號出棧,則遍歷完所有括號後 stack 仍然為空;

建立雜湊表 dic 構建左右括號對應關係:keykey 左括號,valuevalue 右括號;這樣查詢 22 個括號是否對應只需 o(1

)o(1

) 時間複雜度;建立棧 stack,遍歷字串 s 並按照演算法流程一一判斷。

演算法流程

如果 c 是左括號,則入棧 pushpush;

否則通過雜湊表判斷括號對應關係,若 stack 棧頂出棧括號 stack.

pop(

) 與當前遍歷括號 c 不對應,則提前返回 falsefalse。

提前返回 falsefalse

提前返回優點: 在迭代過程中,提前發現不符合的括號並且返回,提公升演算法效率。

解決邊界問題:

棧 stack 為空: 此時 stack.

pop(

) 操作會報錯;因此,我們採用乙個取巧方法,給 stack 賦初值 ?

? ,並在雜湊表 dic 中建立 key:

'?',value:

'?'key: ′ ? ′,value: ′ ? ′ 的對應關係予以配合。此時當 stack 為空且 c 為右括號時,可以正常提前返回 falsefalse;

字串 s 以左括號結尾: 此情況下可以正常遍歷完整個 s,但 stack 中遺留未出棧的左括號;因此,最後需返回 len

(stack)

==1,以判斷是否是有效的括號組合。

複雜度分析

時間複雜度 o

(n)o

(n):正確的括號組合需要遍歷 11 遍 s;

空間複雜度 o

(n)o

(n):雜湊表和棧使用線性的空間大小。

class

solution')

;put

('['

,']');

put(

'(',

')')

;put

('?'

,'?');

}};public

boolean

isvalid

(string s)};

for(character c : s.

tochararray()

)return stack.

size()

==1;}

}

思路:棧

1、對於奇數個的字串,一定是錯的,因為正確的都成對兒

2、建立棧stack

a =newstack

<

>()

;3、迴圈體(遍歷字串)

4、return a.

empty()

class

solution

stack

a =newstack

<

>()

;for

(int i=

0;ilength()

;i++

)else

char prechar = a.

peek()

;if((prechar=='')

||(prechar==

'['&&thechar==

']')

||(prechar==

'('&&thechar==

')')

)else}}

return a.

empty()

;}}

力扣簡單專欄 20 有效的括號

給定乙個只包括 的字串 s 判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。示例 1 輸入 s 輸出 true 示例 2 輸入 s 輸出 true 示例 3 輸入 s 輸出 false 示例 4 輸入 s 輸出 false 示例 5 輸入 s 輸出 t...

力扣 20 有效的括號

題目 給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例1 輸入 輸出 true 示例2 輸入 輸出 true 示例3 輸入 輸出 false 示例4 輸入 輸出 false 示例5 輸入 輸出 ...

力扣 20 有效的括號

給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出 true 示例 3 輸入 輸出 false 示例 4 輸入 輸出 false 示例 5 輸入 輸...