给出一串包含 ( 、 ) 、[ 和 ] 的字符串,字符串在以下三种情况下为合法的:
1)字符串为空;
2)如果A和B都是合法的,那么AB也是合法的;
3)如果A是合法的,那么(A)和[A]也是合法的。
试判断输入的字符串是否合法。
输入格式:
输入包括一串由若干个 ( 、 ) 、 [ 或 ] 组成的字符串,字符串长度不超过100。
输出格式:
如果该字符串合法,输出“Yes”;否则输出“No”。
输入样例:
([])
输出样例:
Yes
给出一串包含 ( 、 ) 、[ 和 ] 的字符串,字符串在以下三种情况下为合法的:
1)字符串为空;
2)如果A和B都是合法的,那么AB也是合法的;
3)如果A是合法的,那么(A)和[A]也是合法的。
试判断输入的字符串是否合法。
输入格式:
输入包括一串由若干个 ( 、 ) 、 [ 或 ] 组成的字符串,字符串长度不超过100。
输出格式:
如果该字符串合法,输出“Yes”;否则输出“No”。
输入样例:
([])
输出样例:
Yes
这个问题不是回答过了么?
https://ask.csdn.net/questions/1061034
#include <stdio.h>
#include <string.h>
char conv(char c)
{
if (c == ')') return '(';
if (c == '}') return '{';
if (c == ']') return '[';
return 0;
}
int main()
{
char arr[100];
int n = 0;
int result = 1;
char s[100];
scanf("%s", s);
for (int i = 0; i < strlen(s); i++)
{
if (s[i] == '(' || s[i] == '[' || s[i] == '{')
arr[n++] = s[i];
else if (s[i] == ')' || s[i] == ']' || s[i] == '}')
{
if (arr[n - 1] != conv(s[i])) { result = 0; break; }
n--;
}
}
if (n != 0) result = 0;
if (result) printf("YES"); else printf("NO");
return 0;
}