2题目:请编写程序,判断输入的括号序列是否是合法的括号序列。 碧金是K護是生人确出是这个序列合法性判定Sample Input: D[()]0 ((((0))[0] Sample Output: OK ILLEGAL
时间: 2023-03-30 12:03:40 浏览: 49
以下是 C 知道的回答:
这是一个括号匹配问题,可以使用栈来解决。遍历输入的括号序列,如果是左括号,则将其入栈;如果是右括号,则判断栈顶元素是否与其匹配,如果匹配则将栈顶元素出栈,否则返回 ILLEGAL。最后,如果栈为空,则返回 OK,否则返回 ILLEGAL。
以下是 C 知道的代码实现:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 100
int is_valid(char *str) {
int len = strlen(str);
char stack[MAX_LEN];
int top = -1;
for (int i = ; i < len; i++) {
if (str[i] == '(' || str[i] == '[' || str[i] == '{') {
stack[++top] = str[i];
} else if (str[i] == ')' || str[i] == ']' || str[i] == '}') {
if (top < ) {
return ;
}
if ((str[i] == ')' && stack[top] == '(') ||
(str[i] == ']' && stack[top] == '[') ||
(str[i] == '}' && stack[top] == '{')) {
top--;
} else {
return ;
}
}
}
return top < ;
}
int main() {
char str[MAX_LEN];
while (scanf("%s", str) != EOF) {
if (is_valid(str)) {
printf("OK\n");
} else {
printf("ILLEGAL\n");
}
}
return ;
}