LeetCode1614.括號的最大巢狀深度(Java)
阿新 • • 發佈:2020-12-25
技術標籤:LeetCode刷題
題目
如果字串滿足以下條件之一,則可以稱之為 有效括號字串(valid parentheses string,可以簡寫為 VPS):
字串是一個空字串 “”,或者是一個不為 “(” 或 “)” 的單字元。
字串可以寫為 AB(A 與 B 字串連線),其中 A 和 B都是 有效括號字串 。
字串可以寫為 (A),其中 A 是一個 有效括號字串 。
類似地,可以定義任何有效括號字串 S 的 巢狀深度depth(S):
depth("") = 0 depth© = 0,其中 C 是單個字元的字串,且該字元不是 “(” 或者 “)”
depth(A + B) = max(depth(A), depth(B)),其中 A 和 B 都是 有效括號字串
depth("(" + A + “)”)= 1 + depth(A),其中 A 是一個 有效括號字串
例如:""、"()()"、"()(()())" 都是 有效括號字串(巢狀深度分別為 0、1、2),而 “)(” 、"(()" 都不是 有效括號字串 。
給你一個 有效括號字串 s,返回該字串的 s 巢狀深度 。
示例:
輸入:s = “(1+(2*3)+((8)/4))+1” 輸出:3解釋:數字 8 在巢狀的 3 層括號中。
題目這麼長,看暈了嗎?反正我是懵懵懂懂的
我思考了一下,字串一般可以和棧打交道,於是我就用了棧,統計左括號有多少個
(按理說,應該是左右括號完全匹配的深度是多少,但是系統貌似以左括號的最大個數來統計的)
static int maxDepth;
static public int maxDepth(String s) {
Stack<Character> stack = new Stack<>();
if (s == "" || (s.length() == 1 && (s != "(" || s != ")"))) {
return 0;
} else {
char[] cs = s.toCharArray();
int depth = 0;
for (int i = 0; i < cs.length; i++) {
if (cs[i] == '(') {
depth++;
stack.add(cs[i]);
} else if (cs[i] == ')') {
stack.pop();
depth--;
}
maxDepth = Math.max(depth, maxDepth);
}
}
return maxDepth;
}
結果發現可以不用棧
static int maxDepth;
static public int maxDepth2(String s) {
if (s == "" || (s.length() == 1 && (s != "(" || s != ")"))) {
return 0;
} else {
char[] cs = s.toCharArray();
int depth = 0;
for (int i = 0; i < cs.length; i++) {
if (cs[i] == '(') {
depth++;
} else if (cs[i] == ')') {
depth--;
}
maxDepth = Math.max(depth, maxDepth);
}
}
return maxDepth;
}
反思
懵懵懂懂,繼續加油
end.