zoukankan      html  css  js  c++  java
  • “()” “[]”问题

    试题描述
    有一个仅由“(”、“)”、“[”、“]”组成的字符串S。下面规定怎样的字符串是合法的:
    1. 空串是合法的。
    2. 若字符串A是合法的,则字符串[A]、(A)都是合法的。
    3. 若字符串A、B都是合法的,则字符串AB是合法的。
    例如[]、([])、()[[]]都是合法的,而([)]、((]))是不合法的。
    给定字符串S,判断它是否合法。
     
    输入
    输入文件包含多组测试数据。
    第一行,一个整数T,表示测试数据的组数。
    接下来的T行,每行一个字符串,表示你需要判断的字符串S。
    输出
    对于每个给定的字符串,输出一行,若它是合法的,则输出“Yes”,否则输出“No”。
    输入示例
    2
    ([])
    ([)]
    输出示例
    Yes
    No
    其他说明
    1<=T<=50,字符串长度不超过50。

    C程序:

    #include <cstdio>
    #include <cstring>
    
    char s[60];
    int len;
    
    bool kh(int start, int end){
         if(start > len || end > len){
            return true;
         }
         if(start > end){
            return true;
         }
         if(start + 1 == end && (s[start] == '(' && s[end] == ')') || (s[start] == '[' && s[start] == ']')){
            return true;
         }
         for(int i = start + 1; i <= end; ++i){
            if((s[start] == '(' && s[i] == ')') || (s[start] == '[' && s[i] == ']')){
               if(kh(start + 1, i - 1) && kh(i + 1, end)){
                  return true;
               }
            }
         }
         return false;
    }
    
    int main(){
        int n;
        scanf("%d", &n);
        for(int k = 1; k <= n; ++k){
           scanf("%s", s);
           len = strlen(s) - 1;
           if(kh(0, len)){
              printf("Yes\n");
           }else{
              printf("No\n");
           }
           memset(s, 0, sizeof(s));
        }
        return 0;
    }
  • 相关阅读:
    [Python学习]Iterator 和 Generator的学习心得
    ubantu linux的bash shell初接触
    Linux-Ubuntu 启用root账户
    Ubuntu Linux系统三种方法添加本地软件库
    ASK,OOK,FSK的联系和区别
    spinlock一边连逻辑一边连控制器
    Cgroup与LXC简介
    关于 package.json 和 package-lock.json 文件说明
    ng build --aot 与 ng build --prod
    【Rxjs】
  • 原文地址:https://www.cnblogs.com/WHYFRANK/p/4717683.html
Copyright © 2011-2022 走看看