(18)Go棧思想解決括號(hào)匹配問(wèn)題

棧是一種先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu)
思路:遍歷字符串,如果是左括號(hào)則放進(jìn)棧中,如果是右括號(hào)則從棧中推出元素,看兩者是否匹和,
如果均匹和且棧中為空,返回true
// 時(shí)間復(fù)雜度為O(n)
// 空間復(fù)雜度為O(n)
func isValid2(s string) bool {
    m := make(map[byte]byte)
    m['('] = ')'
    m['['] = ']'
    m['{'] = '}'

    // 數(shù)組實(shí)現(xiàn)棧功能
    sli := make([]byte, 0)
    if len(s) == 0 {
        return true
    }
    if len(s)%2 == 1 {
        return false
    }
    for i, b := range s {
        if i == 0 && (s[i] == ')' || s[i] == ']' || s[i] == '}') {
            return false
        }
        if b == '(' || b == '[' || b == '{' {
            sli = append(sli, byte(b))
        } else {
            // 這里實(shí)現(xiàn)棧的功能
            left := sli[len(sli)-1]
            sli = sli[:len(sli)-1]
            if m[left] != byte(b) {
                return false
            }
        }
    }
    if len(sli) != 0 {
        return false
    }
    return true
}

提交leetcode,通過(guò)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容