[Leetcode][JAVA][第1111题][栈思想]
生活随笔
收集整理的這篇文章主要介紹了
[Leetcode][JAVA][第1111题][栈思想]
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【問題描述】
有效括號字符串 定義:對于每個左括號,都能找到與之對應的右括號,反之亦然。詳情參見題末「有效括號字符串」部分。嵌套深度 depth 定義:即有效括號字符串嵌套的層數,depth(A) 表示有效括號字符串 A 的嵌套深度。詳情參見題末「嵌套深度」部分。給你一個「有效括號字符串」 seq,請你將其分成兩個不相交的有效括號字符串,A 和?B,并使這兩個字符串的深度最小。不相交:每個 seq[i] 只能分給 A 和 B 二者中的一個,不能既屬于 A 也屬于 B 。 A 或 B 中的元素在原字符串中可以不連續。 A.length + B.length = seq.length max(depth(A), depth(B))?的可能取值最小。 劃分方案用一個長度為 seq.length 的答案數組 answer 表示,編碼規則如下:answer[i] = 0,seq[i] 分給 A 。 answer[i] = 1,seq[i] 分給 B 。 如果存在多個滿足要求的答案,只需返回其中任意 一個 即可。示例 1:輸入:seq = "(()())" 輸出:[0,1,1,1,1,0] 示例 2:輸入:seq = "()(())()" 輸出:[0,0,0,1,1,0,1,1]提示:1 <= text.size <= 10000有效括號字符串:僅由?"(" 和?")"?構成的字符串,對于每個左括號,都能找到與之對應的右括號,反之亦然。 下述幾種情況同樣屬于有效括號字符串:1. 空字符串2. 連接,可以記作?AB(A 與 B 連接),其中?A?和?B?都是有效括號字符串3. 嵌套,可以記作?(A),其中?A?是有效括號字符串 嵌套深度:類似地,我們可以定義任意有效括號字符串 s 的 嵌套深度?depth(S):1. s 為空時,depth("") = 02. s 為 A 與 B 連接時,depth(A + B) = max(depth(A), depth(B)),其中?A 和?B?都是有效括號字符串3. s 為嵌套情況,depth("(" + A + ")") = 1 + depth(A),其中 A 是有效括號字符串例如:"","()()",和?"()(()())"?都是有效括號字符串,嵌套深度分別為 0,1,2,而?")(" 和?"(()"?都不是有效括號字符串。【解答思路】
1. 連續的 ‘(’會造成嵌套深度的增加,因此對于這種要把他們分到不同的組中。而連續的標準不僅僅是原始字符串中的左右相鄰,應該還包括中間成對的 ‘()’消除后的連續
時間復雜度:O(N) 空間復雜度:O(N)
public class Solution {public int[] maxDepthAfterSplit(String seq) {int len = seq.length();int[] res = new int[len];// 嵌套深度,棧的當前高度int depth = 0;// 在 Java 里,seq.charAt(i) 函數會做下標越界檢查,// 因此先轉換成字符數組是常見的做法char[] charArray = seq.toCharArray();for (int i = 0; i < len; i++) {// 遇左括號,連續括號個數加 1,if (charArray[i] == '(') {depth++;// %2 也可以寫成 & 1,為了保證語義清楚,寫 %2res[i] = depth % 2;} else {// 遇到右括號,與之前的嵌套深度(棧頂元素的高度)分在一組,因此先取模,再 --res[i] = depth % 2;depth--;}}return res;} }作者:liweiwei1419 鏈接:https://leetcode-cn.com/problems/maximum-nesting-depth-of-two-valid-parentheses-strings/solution/qian-tao-shen-du-wan-cheng-gua-hao-pi-pei-wen-ti-s/【總結】
1.括號匹配 棧思想
2. 感謝leedcode@Mamba_ZJP
找工作手撕代碼環節一般看風水(面試官心情),建議還是多刷題,訓練思維,總結方法論,分析過程
3.感謝leedcode@liweiwei1419
-如果面試的時候遇到,心態上先穩住,然后把把題意問清楚,說一點自己的想法和思路,或者可以從面試官那里得到一點提示。
-如果考到的題目完全不在自己的知識貯備里,我個人覺得直接說沒有準備這部分的內容,好讓面試官調整去討論你會的問題上,發現你身上的優點,目的還是節約交談時間,是一種建議的辦法。
總結
以上是生活随笔為你收集整理的[Leetcode][JAVA][第1111题][栈思想]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PPT实现倒计时功能(VBA实现)
- 下一篇: JAVA入门[6]-Mybatis简单示