1. 程式人生 > 其它 >LEETCODE 20

LEETCODE 20

技術標籤:c語言

LEETCODE 20 括號匹配

題目

Given a string containing just the characters ‘(’ , ‘)’ , ‘{’ , ‘}’ , ‘[’ and ‘]’ , determine if the input string is valid.

The brackets must close in the correct order, “()” and “(){}[]” are all valid, but "(]"and “([)]” are not.

題目簡化

如果簡化成一種括號,只有’(’

‘)’。在合法的序列中,必然是先出現’(’,再出現’)’。所以:

  1. 在任意一個位置上,左括號數量 >= 右括號數量
  2. 在最後一個位置上,左括號數量 == 右括號數量
  3. 程式中只需要記錄左括號數量和右括號數量即可
int isValid(char *str) {
    int lnum = 0, rnum = 0;
    int length = strlen(str);
    for (int i = 0; i < length; i++) {
        switch (str[i]) {
            case '(' : ++lnum; break;
            case
')' : ++rnum; break; default : return 0; } if (lnum >= rnum) continue; return 0; } return lnum == rnum; }

其中,程式還可以再優化。先出現的是若干’(’,等待’)‘匹配。我們可以只統計待匹配的’('的數量,進行判斷。

int isValid(char *str) {
    int lnum = 0;
    int length = strlen(str);
    for (int i = 0; i <
length; i++) { switch (str[i]) { case '(' : ++lnum; break; case ')' : --lnum; break; default : return 0; } if (lnum >= 0) continue; return 0; } return lnum == 0; }

我們可以把