有效括號字串為空 ("")、"(" + 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,考慮將其進行原語...