유효한 괄호

#20.유효한 괄호

문제 설명


s , '(' , ')' , '{' , '}''[' 문자만 포함하는 문자열 ']' 가 주어지면 입력 문자열이 유효한지 확인합니다.

다음과 같은 경우 입력 문자열이 유효합니다.
  • 열린 브래킷은 동일한 유형의 브래킷으로 닫아야 합니다.
  • 열린 괄호는 올바른 순서로 닫아야 합니다.

  • 예 1

    Input: s = "()"
    Output: true
    


    예 2

    Input: s = "()[]{}"
    Output: true
    


    예 3

    Input: s = "(]"
    Output: false
    


    설명



    給定一個字串其內容僅有 ()[]{} 六種括號來組成,其括號號使用虉使用處使用的相同,例如 ( 僅能以 ) 關閉,請確認字串是否為有效

    해결책



    一開始先將奇數長度的字串排除,因為括號為倆倆一組,不會有單一括號存在.

    建立 建立 個 一 來 來 裝載 後續 迴圈 迴圈 內 內 判斷 出 的 右括號 右括號 右括號 右括號 右括號 右括號 右括號 右括號 一 一 迴 迴 圈 迭代字串內 所有 字符 字符 字符 字符 在 次 次 迭代 迭代 中 中 中 中 中 中 中 中 中 字符 是否 是否 為 任 括號 括號 如果 是 是 是 是 是 則 則 在 堆疊 堆疊 中存 中存 中存 中存 中存入對應的右括號; 如果當前符號為右括號,將堆疊最上方的元素推出,比較兩者是否一樣,若一樣繼續下次迴圈,否則6 6

    에서最後一個 false 中除了上述的判斷之外,如果迴圈尚未結束,但堆疊內已經沒有任何元素,表示已經沒有對應拴號,有尔應括號 9 表示已經沒有對應拴號6

    迴圈結束後,如果堆疊內還有元素存在,也表示沒有相對應的括號,故最後直接返回堆疊內數量是否等於零判斷的

    public bool IsValid(string s)
    {
        if (s.Length % 2 != 0) return false;
    
        Stack<char> stack = new Stack<char>();
    
        for (int i = 0; i < s.Length; i++)
        {
            if (s[i] == '(')
                stack.Push(')');
            else if (s[i] == '[')
                stack.Push(']');
            else if (s[i] == '{')
                stack.Push('}');
            else if (stack.Count == 0 || s[i] != stack.Pop())
                return false;
        }
    
        return stack.Count == 0;
    }
    


    참조



    LeetCode Solution

    GitHub Repository


    글 읽어주셔서 감사합니다 🌷 🌻 🌼

    마음에 드셨다면 주저말고 하트 꾸욱 눌러주세요❤️
    또는 내 Leetcode 솔루션에서 좋아요를 클릭하세요.
    또는 내 GitHub ⭐ 팔로우
    또는 커피를 사주세요 ⬇️ 감사합니다.

    좋은 웹페이지 즐겨찾기