LeetCode 1249 移除無效的括號

2022-07-10 00:57:13 字數 1262 閱讀 8478

題目大概的意思是輸入一組字串,字串包含小寫字母和『(』、『)』,保留能匹配成一對的小括號,去掉多餘的『(』或者『)』。答案可能會有多個,只需要輸出乙個正常的字串就可以。

括號匹配,我們可以使用棧的資料結構來匹配成對的括號,遇到乙個左括號『(』就入棧,如果遇到乙個右括號『)』,需要判斷棧是否為空(代表右括號前面是否有左括號跟它匹配),棧為空,那麼這個就是無效的右括號;如果遍歷完字串,棧不為空,還有左括號『(』,那麼這些左括號也是無效的。

主要步驟如下圖所示:

圖1為原始的陣列;c代表當前遍歷到的字元位置;s代表棧,儲存的是左括號的位置,為了找到右括號匹配之後復原左括號的,如果沒有匹配到就是無效字元。

圖2為遍歷到乙個左括號,先將左括號設定為『.』,將位置編號入棧。

圖3跟圖2描述一致。

圖4為遍歷到乙個右括號,先判斷s棧是否為空,s棧不空,將棧頂的對應位置的字元設定回左括號,然後位置序號出棧。

圖5跟圖4描述一致。

圖6為遍歷到乙個右括號,但是s棧為空,所有當前的右括號為無效字元,設定為『.』。

圖7為遍歷完整的字元,去除.的無效字元,最後就是有效的字串。

class

solution

//判斷是右括號並且棧不為空(代表前面有左括號),可以做匹配,出棧

//恢復前面的左括號

else

if(s[i] == '

)' && !p.empty())

//沒有左括號匹配,將當前符號複製為.

else

if(s[i] == '

)' &&p.empty())

}//當不是.,代表是有效符號

Leetcode 1249 移除無效的括號

給你乙個由 和小寫字母組成的字串 s。你需要從字串中刪除最少數目的 或者 可以刪除任意位置的括號 使得剩下的 括號字串 有效。請返回任意乙個合法字串。有效 括號字串 應當符合以下 任意一條 要求 空字串或只包含小寫字母的字串 可以被寫作 ab a 連線 b 的字串,其中 a 和 b 都是有效 括號字...

LeetCode 1249 移除無效的括號

類似於括號匹配的問題,第一次自己寫的時候,提交了好幾次才過,思路就是使用棧,主要需要處理的就是找到哪些括號是匹配的那些是不匹配的。首先遇到 就進棧,遇到 需要分兩種情況,如果棧不為空的時候,說明之前有過 就出棧,代表找到一對匹配的,但是如果棧為空,說明 在還沒有出現 的時候就先出現了,那麼顯然出現的...

Leetcode 1249 移除無效的括號 棧)

給你乙個由 和小寫字母組成的字串 s。你需要從字串中刪除最少數目的 或者 可以刪除任意位置的括號 使得剩下的 括號字串 有效。請返回任意乙個合法字串。有效 括號字串 應當符合以下 任意一條 要求 空字串或只包含小寫字母的字串 可以被寫作 ab a 連線 b 的字串,其中 a 和 b 都是有效 括號字...