IOS 算法(基礎(chǔ)篇) ----- 括號的最大嵌套深度

如果字符串滿足以下條件之一,則可以稱之為 有效括號字符串(valid parentheses string,可以簡寫為 VPS):
字符串是一個空字符串 "",或者是一個不為 "(" 或 ")" 的單字符。
字符串可以寫為 AB(A 與 B 字符串連接),其中 A 和 B 都是 有效括號字符串 。
字符串可以寫為 (A),其中 A 是一個 有效括號字符串 。
類似地,可以定義任何有效括號字符串 S 的 嵌套深度 depth(S):
depth("") = 0
depth(C) = 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
解釋:數(shù)字 8 在嵌套的 3 層括號中。

輸入:s = "(1)+((2))+(((3)))"
輸出:3

輸入:s = "1+(2*3)/(2-1)"
輸出:1

輸入:s = "1"
輸出:0

解題思路

棧方法

題意不難理解, 留意下 "()" 這種就算1個深度

定義一個容器數(shù)組 temp

棧方法

判斷"(" 移入容器數(shù)組
判斷")" 先判斷深度其實(shí)就是數(shù)組元素最大值, 再最后"("移出容器數(shù)組

反復(fù)移入移出處理, 求得結(jié)果

(當(dāng)然, 我們也可以不用數(shù)組, 定義數(shù)字進(jìn)行加減操作, 判斷最大值也可)

未翻譯版
class Solution {
    func maxDepth(_ s: String) -> Int {
        
        var result = 0, temp:[Character] = []
        
        for i in s {
            
            if i == "(" {
                
                temp.append(i)
                
            }else if i == ")" {
            
                result = max(result, temp.count)
                    
                temp.removeLast()
            }
            
        }
        
        return result
    }
}
翻譯版
class Solution {
    func maxDepth(_ s: String) -> Int {
        
        // 定義最后結(jié)果, 容器數(shù)組, 
        // 當(dāng)然我們也可以設(shè)置temp = 0, 后續(xù)通過 +1, -1進(jìn)行操作
        var result = 0, temp:[Character] = []
        
        // 循環(huán)s中每一個字符
        for i in s {
            
            // 如果 i == "(", temp移入 "("
            if i == "(" {

                temp.append(i)
            
            // 如果 i == ")"
            }else if i == ")" {
                 
                // 求最大值
                result = max(result, temp.count)
                // temp中最后項(xiàng)出棧  
                temp.removeLast()
            }
            
        }
        
        // 返回結(jié)果
        return result
    }
}
換計(jì)數(shù)法
    func maxDepth(_ s: String) -> Int {
        
        var result = 0, temp = 0
        
        for i in s {
            
            if i == "(" {
                
                temp += 1
                
            }else if i == ")" {
            
                result = max(result, temp)
                    
                temp -= 1
            }

        }
        
        return result

    }

題目來源:力扣(LeetCode) 感謝力扣爸爸 :)
IOS 算法合集地址

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容