LEETCODE 20
阿新 • • 發佈:2020-12-29
技術標籤: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.
題目簡化
如果簡化成一種括號,只有’(’
- 在任意一個位置上,左括號數量 >= 右括號數量
- 在最後一個位置上,左括號數量 == 右括號數量
- 程式中只需要記錄左括號數量和右括號數量即可
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;
}
我們可以把