LeetCode算法入門 有效的括號 解法與分析

問題描述:

給定一個只包括 '('')''{''}''['']' 的字符串,判斷字符串是否有效。

有效字符串需滿足:

  1. 左括號必須用相同類型的右括號閉合。
  2. 左括號必須以正確的順序閉合。

注意空字符串可被認爲是有效字符串。

示例 1:

輸入: "()"
輸出: true

示例 2:

輸入: "()[]{}"
輸出: true

示例 3:

輸入: "(]"
輸出: false

示例 4:

輸入: "([)]"
輸出: false

示例 5:

輸入: "{[]}"
輸出: true

解法一:

用棧。

思路:此題只需要採用位運算,每次將原來的數字向左移動1位,就需要把該末尾加到我們的數字中去即可,此題需要注意的是一點要循環32次,不僅是有32位,最重要的不能判斷到原來的數字爲0就結束循環,這樣就有可能的導致沒有補足0所以要循環32次。

同時對於左移而言,末尾全部補上的是0,而對於右移而言左邊補的是原本最高位的數字,比如一個32位的數字最高位(也就是符號位)爲1就全部補上1,如果爲0 就全部補上0.這個知識點也是面試常考的。

代碼如下:

class Solution {
public:
    bool isValid(string s) {
        stack<char> st;
        int n = s.length();
        for(int i =0; i < n ; i++){
            if(s[i]=='(' || s[i]=='[' || s[i]=='{'){
                st.push(s[i]);
                continue;
            }
            char top = -1;
            if(!st.empty()) top = st.top();
            if(s[i]==')'){
                if(top != '(') return false; 
                st.pop();
            }
            if(s[i]==']'){
                if(top != '[') return false;    
                st.pop();
            }
            if(s[i]=='}'){
                if(top != '{') return false;  
                st.pop();
            }
        }
        if(st.empty()) return true;
        else return false;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章