1. 程式人生 > 實用技巧 >leetcode之20有效的括號Golang

leetcode之20有效的括號Golang

本題採用了棧的思想

在Go語言中使用棧是一件非常方便的事情,只需要使用切片就可以了

本題的思路將從括號字串中讀取到的字元進行出入棧操作

  如果是左括號“(、[、{”,就直接入棧

  如果是右括號,首先判斷棧是否非空

    如果是空的,那麼棧中沒有左括號與當前遍歷到的右括號匹配,就返回錯誤

    如果不是空的,那麼就讀取棧頂的左括號,判斷這個左括號與當前遍歷到的右括號是否匹配  

      如果不匹配,就直接返回錯誤

      如果匹配,就從棧頂彈出這個左括號

  遍歷完整個括號字串以後,檢查棧是否為空

    如果棧為空,就返回正確,說明括號匹配

    如果棧不為空,就返回錯誤,說明棧中還遺留了左括號沒有與之對應的右括號來匹配

程式碼如下:

func isValid(s string) bool {
	var brakets []byte
	for _, v := range s {
		switch v {
		case '(', '[', '{':
			brakets = append(brakets, byte(v))
		case ')', ']', '}':
			if len(brakets) == 0 {
				return false
			}
			if v == ')' && brakets[len(brakets)-1] == '(' ||
				v == ']' && brakets[len(brakets)-1] == '[' ||
				v == '}' && brakets[len(brakets)-1] == '{' {
				brakets = brakets[:len(brakets)-1]
			} else {
				return false
			}
		default:
			return false
		}
	}
	if len(brakets) > 0 {
		return false
	}
	return true
}