yangzhixiaohuli 发表于 2024-11-1 16:24:03

括号合法问题

括号()的组合千奇百怪,Drizzle 想知道各种组合的括号可以是否合法
合法要求:每个同类型的左括号必须有与之对应的同类的右括号以正确的顺序闭合

要求:
输入:输入一个括号字符串
输出:输出是否合法,是则True,否则False

示例:
输入:

(){}[]
输出:

True
范围:
对于 100% 的数据:括号字符串长度 ≤ 100

这题用C++怎么做

岳明辉 发表于 2024-11-13 02:01:22

jackz007 发表于 2024-11-13 23:30:42

#include <stdio.h>

char d[] = {'{' , '}' ,'[' , ']' , '(' , ')'}                  ;

bool check(char s[])
{
      char e                                              ;
      bool r                                                   ;
      int i , j , k                                          ;
      for(i = k = 0 , r = true ; s && r ; i ++) {
                for(j = 0 ; j < 6 ; j ++) if(s == d) break ;
                if(j < 6) {
                        if(! (j % 2)) {
                              e = j + 1                  ;
                        } else {
                              if(k && s == d]) {
                                        e = 0             ;
                                        k --                     ;
                              } else {
                                        r = false                ;
                              }
                        }
                }
         }
         if(r) r = (k == 0) ? true : false                     ;
         return r                                                ;
}

int main(void)
{
      char s                                              ;
      int i , n                                                ;
      for(n = 0 ; (s = getchar()) != '\n' ;) {
                for(i = 0 ; i < 6 ; i ++) if(s == d) break ;
                if(i < 6) n ++                                 ;
      }
      s = 0                                                 ;
      if(check(s)) printf("True !\n")                        ;
      else printf("False !\n")                                 ;
}
      编译、运行实况:
D:\\C>g++ -static -o x x.cpp

D:\\C>x
{{[[[()()]]]}}
True !
页: [1]
查看完整版本: 括号合法问题