给定一个字符串str,判断是不是整体有效的括号字符串(整体有效:即存在一种括号匹配方案,使每个括号字符均能找到对应的反向括号,且字符串中不包含非括号字符)。
数据范围:
输入包含一行,代表str。
输出一行,如果str是整体有效的括号字符串,请输出“YES”,否则输出“NO”。
(())
YES
()a()
NO
()a()中包含了 ‘a’,a不是括号字符
时间复杂度,额外空间复杂度
#include <stdio.h> #include <string.h> #include <stdbool.h> #define MAXLEN 100001 bool isValid(char *str); int main(void) { char str[MAXLEN]; scanf("%s", str); printf("%s\n", isValid(str) ? "YES" : "NO"); return 0; } bool isValid(char *str) { int len = (int) strlen(str); int sum = 0; for (int i = 0; i < len; i++) { if (str[i] != '(' && str[i] != ')') return false; sum += str[i] == '(' ? 1 : -1; if (sum < 0) return false; } return sum == 0; }