1. 程式人生 > 其它 >LeetCode1614.括號的最大巢狀深度(Java)

LeetCode1614.括號的最大巢狀深度(Java)

技術標籤: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.