力扣簡單專欄 1021 刪除最外層的括號

2021-10-22 04:03:32 字數 1451 閱讀 9978

有效括號字串為空 ("")、"(" + a + 「)」 或 a + b,其中 a 和 b 都是有效的括號字串,+ 代表字串的連線。例如,"","()","(())()" 和 「(()(()))」 都是有效的括號字串。

如果有效字串 s 非空,且不存在將其拆分為 s = a+b 的方法,我們稱其為原語(primitive),其中 a 和 b 都是非空有效括號字串。

給出乙個非空有效字串 s,考慮將其進行原語化分解,使得:s = p_1 + p_2 + … + p_k,其中 p_i 是有效括號字串原語。

對 s 進行原語化分解,刪除分解中每個原語字串的最外層括號,返回 s 。

示例 1:

輸入:"(()())(())"

輸出:"()()()"

解釋:輸入字串為 「(()())(())」,原語化分解得到 「(()())」 + 「(())」,

刪除每個部分中的最外層括號後得到 「()()」 + 「()」 = 「()()()」。

示例 2:

輸入:"(()())(())(()(()))"

輸出:"()()()()(())"

解釋:輸入字串為 「(()())(())(()(()))」,原語化分解得到 「(()())」 + 「(())」 + 「(()(()))」,

刪除每個部分中的最外層括號後得到 「()()」 + 「()」 + 「()(())」 = 「()()()()(())」。

示例 3:

輸入:"()()"

輸出:""

解釋:輸入字串為 「()()」,原語化分解得到 「()」 + 「()」,

刪除每個部分中的最外層括號後得到 「」 + 「」 = 「」。

s.length <= 10000

s[i] 為 「(」 或 「)」

s 是乙個有效括號字串

解題關鍵:

利用棧來判定原語,用另乙個字串接收原語。

思路:括號匹配的問題首先想到棧。題目給的條件還是相對寬鬆的,輸入都是括號配對的,故只需用乙個棧,掃瞄給定字串,遇到左括號入棧,遇到右括號出棧,當棧空時即判定完乙個原語。用另乙個初始為空的字串str在每次入棧時拼接左括號,每次出棧時拼接右括號。接收完乙個原語後去除首尾元素或替換首尾元素為空串,然後再用乙個字串ans拼接str,str置為空串,重複上述操作即可。

偽**:

class

solution

elseif(

!stk.

empty()

)if(stk.

empty()

)}return ans;

}}

class

solution

elseif(

!stk.

empty()

)if(stk.

empty()

)}return ans;}}

;

1021 刪除最外層的括號

有效括號字串為空 a 或 a b,其中 a 和 b 都是有效的括號字串,代表字串的連線。例如,和 都是有效的括號字串。如果有效字串 s 非空,且不存在將其拆分為 s a b 的方法,我們稱其為原語 primitive 其中 a 和 b 都是非空有效括號字串。給出乙個非空有效字串 s,考慮將其進行原語...

1021 刪除最外層的括號

有效括號字串為空 a 或 a b,其中 a 和 b 都是有效的括號字串,代表字串的連線。例如,和 都是有效的括號字串。如果有效字串 s 非空,且不存在將其拆分為 s a b 的方法,我們稱其為原語 primitive 其中 a 和 b 都是非空有效括號字串。給出乙個非空有效字串 s,考慮將其進行原語...

1021 刪除最外層的括號

有效括號字串為空 a 或 a b,其中 a 和 b 都是有效的括號字串,代表字串的連線。例如,和 都是有效的括號字串。如果有效字串 s 非空,且不存在將其拆分為 s a b 的方法,我們稱其為原語 primitive 其中 a 和 b 都是非空有效括號字串。給出乙個非空有效字串 s,考慮將其進行原語...