LeetCode 1021 刪除最外層括號

2021-09-27 11:51:11 字數 1625 閱讀 7700

有效括號字串為空 ("")、"(" + 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 是乙個有效括號字串

看到括號匹配,很容易就聯想到最近學習的資料結構中的棧,使用棧中push(),pop(),peek()等函式可以實現實現括號的匹配。遇到』(』,即入棧;遇到』)』,則出棧。最外層的括號匹配完畢之時,棧為空。使用string類中的substring()函式將最外層括號內的括號以子串的形式提取出來,最後相加輸出即可。需要記錄更新子串的起始和終止位置,以及一些邊界情況的判斷。

public string removeouterparentheses

(string s)

}return sub;

}

stringbuilder是jdk1.5以後出現了功能和stringbuffer一模一樣的物件,可以實現對字串的增刪改查。因此,通過乙個標記count,實現對最外層括號的count值為0,內部括號的count值必然大於0。將所有count值大於0的字串新增到建立的stringbuilder物件中,最終使用tostring()函式輸出。

public string removeouterparentheses1

(string s)

else

}return sb.

tostring()

;}

LeetCode 1021 刪除最外層的括號

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

leetcode 1021 刪除最外層的括號

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

leetcode刪除最外層的括號 1021

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