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;
    }
  • 相关阅读:
    解读dbcp自动重连那些事
    dbcp重连问题排查
    Redis 历史版本下载URL
    jackson 完整Jar包
    Linux缺少动态连接库.so--cannot open shared object file: No such file or directory
    多模匹配--历程
    利用poi操作word文档
    Java word 内容读取
    光纤存储和服务器架构总结
    FastDFS和集中存储方式对比
  • 原文地址:https://www.cnblogs.com/WHYFRANK/p/4717683.html
Copyright © 2011-2022 走看看