不過當時是用很笨的方法。
就是先找第一個右括號,
再去找跟它相對應的左括號,
如果match就消除為空白,
沒match就是有少括號或是括號錯誤。
一直重複這個動作,直到整個string變為空白為止,
就是全都有pair……
實際上,根本不是這樣寫!
太笨太複雜了!
根本只要用stack就能解了,囧。
所以括號跟四則運算都能用stack處理……(筆記)
/* ACM 673 Parentheses Balance * mythnc * 2011/11/04 18:37:08 * run time: 0.024 */ #include <stdio.h> #define MAXCHAR 130 #define YES 1 #define NO 0 int pair(char *); int main(void) { int n; char s[MAXCHAR]; scanf("%d\n", &n); while (n--) { fgets(s, MAXCHAR, stdin); if (pair(s) == YES) printf("Yes\n"); else printf("No\n"); } return 0; } /* pair: if () or [] is pair return YES, * else return NO */ int pair(char *s) { int i, count; char stack[MAXCHAR]; for (count = i = 0; s[i] != '\n'; i++) if (s[i] == '(' || s[i] == '[') stack[count++] = s[i]; else if (s[i] == ')') { if (count == 0 || stack[--count] != '(') return NO; } else if (s[i] == ']') if (count == 0 || stack[--count] != '[') return NO; if (count == 0) return YES; else return NO; }
沒有留言:
張貼留言