1. 程式人生 > 實用技巧 >20. 有效的括號 (對括號字串進行有效判定)

20. 有效的括號 (對括號字串進行有效判定)

題目

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

有效字串需滿足:

左括號必須用相同型別的右括號閉合。
左括號必須以正確的順序閉合。
注意空字串可被認為是有效字串。

示例 1:

輸入: "()"
輸出: true

示例2:

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

示例3:

輸入: "(]"
輸出: false

示例4:

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

示例5:

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

來源:力扣(LeetCode)


解答

C語言

利用棧,依次遍歷字串,當為前括號"(""[""{"時,入棧,填入對應的後括號。
當遍歷到的字元不為前括號,且top == -1

,則說明是後括號的同時,前方沒有對應的前括號,返回false;
否則出棧--top
遍歷完畢後,檢查top是否為-1,即可判定字串是否合規。

//	0 ms	5 MB
bool isValid(char * s){
    int len = strlen(s);
    char stack[len + 1];
    int top = -1;
    int i;

    for(i = 0; i < len; i++) {
       if (s[i] == '(') {
           stack[++top] = ')';
       }
       else if (s[i] == '[') {
           stack[++top] = ']';
       }
       else if (s[i] == '{') {
           stack[++top] = '}';
       }
       else if (top == -1 || s[i] != stack[top]) {
           return false;
       }
       else {
           --top;
        }
    }

    if (top == -1) {
        return true;
    } else {
        return false;
    }
    
}