import java.util.ArrayList;
import java.util.Scanner;

/*
 * 题目描述:
 * 读入数据string[ ],然后读入一个短字符串。要求查找string[ ]中和短字符串的所有匹配,输出行号、匹配字符串。
 * 匹配时不区分大小写,并且可以有一个用中括号表示的模式匹配。如“aa[123]bb”,就是说aa1bb、aa2bb、aa3bb都算匹配。
 * 输入:
 * 输入有多组数据。
 * 每组数据第一行输入n(1<=n<=1000),从第二行开始输入n个字符串(不含空格),接下来输入一个匹配字符串。
 * 输出:
 * 输出匹配到的字符串的行号和该字符串(匹配时不区分大小写)。
 * 样例输入:
 * 4
 * Aab
 * a2B
 * ab
 * ABB
 * a[a2b]b
 * 样例输出:
 * 1 Aab
 * 2 a2B
 * 4 ABB
 */

public class q1165 {

  public static void main(String[] args) {
  
    Scanner scanner = new Scanner(System.in);
  
    while(scanner.hasNext()) {
   
      String n = scanner.nextLine();  

      int num = Integer.parseInt(n);
   
      String[][] str = new String[num][1];
      String mat = new String();
   
      // 保存用来匹配的字符串数据
      for(int i=0; i<num; i++)
        str[i][0] = scanner.nextLine();
      // 保存需要匹配的字符串数据
      mat = scanner.nextLine();
      char[] ch = mat.toCharArray();
   
      int x = 0, y = 0; // 用来保存'['和']'在字符数组ch中的位置
      int flag = 0; // 用来记录是否存在'['和']',不存在flag=0,存在flag=1
      for(int i=0; i<ch.length; i++) {
        if(ch[i] == '[') {
          x = i;
          flag = 1;
          continue;
        }
        if(ch[i] == ']') {
          y = i;
          break;
        }
      }
   
      if(flag == 1) {
        // 用n个字符串分别匹配y-x-1个字符串
    
        for(int seq=1; seq<=y-x-1; seq++) {
     
          char[] chnew = new char[ch.length-(y-x+1)+1];
          int nn = 0;
          for(int m=0; m<ch.length-(y-x+1)+1; m++) {
      
            if(m == x) {
              chnew[m] = ch[nn+seq];
              nn = y + 1;
            }
            else {
              chnew[m] = ch[nn];
              nn++;
            }
          }
     
          for(int i=0; i<num; i++) {
      
            char[] target = str[i][0].toCharArray();
            int f = 0; // 判断整个字符串是否全部匹配
      
            if(target.length == chnew.length) {
              for(int j=0; j<chnew.length; j++) {
                if((int)target[j]>=65 && (int)target[j]<=90) {
                  // 是大写字母
                  if((int)target[j] == (int)chnew[j] || (int)target[j]+32 == (int)chnew[j]) {
                    f = 0;
                    continue;
                  }
                  else {
                    f = 1;
                    break;
                  }
                }
                else if((int)target[j]>=48 && (int)target[j]<=57) {
                  // 是数字
                  if((int)target[j] == (int)chnew[j]) {
                    f = 0;
                    continue;
                  }
                  else {
                    f = 1;
                    break;
                  }
                }
                else if((int)target[j]>=97 && (int)target[j]<=122) {
                  // 是小写字母
                  if((int)target[j] == (int)chnew[j] || (int)target[j]-32 == (int)chnew[j]) {
                    f = 0;
                    continue;
                  }
                  else {
                    f = 1;
                    break;
                  }
                }
              }
            }
            else {
              continue;
            }
      
            if(f == 0) {
              System.out.print(i+1 + " ");
              for(int j=0; j<target.length; j++) {
                System.out.print(target[j]);
              }
              System.out.println();
            }
            else {
              continue;
            }
        
          }
     
        }
    
      }
      else {
        // 用n个字符串分别匹配ch
    
        for(int i=0; i<num; i++) {
     
          char[] target = str[i][0].toCharArray();
          int f = 0; // 判断整个字符串是否全部匹配
     
          if(target.length == ch.length) {
            for(int j=0; j<ch.length; j++) {
              if((int)target[j]>=65 && (int)target[j]<=90) {
                // 是大写字母
                if((int)target[j] == (int)ch[j] || (int)target[j]+32 == (int)ch[j]) {
                  f = 0;
                  continue;
                }
                else {
                  f = 1;
                  break;
                }
              }
              else if((int)target[j]>=48 && (int)target[j]<=57) {
                // 是数字
                if((int)target[j] == (int)ch[j]) {
                  f = 0;
                  continue;
                }
                else {
                  f = 1;
                  break;
                }
              }
              else if((int)target[j]>=97 && (int)target[j]<=122) {
                // 是小写字母
                if((int)target[j] == (int)ch[j] || (int)target[j]-32 == (int)ch[j]) {
                  f = 0;
                  continue;
                }
                else {
                  f = 1;
                  break;
                }
              }
            }
          }
          else {
            continue;
           }
     
          if(f == 0) {
            System.out.print(i+1 + " ");
            for(int j=0; j<target.length; j++) {
              System.out.print(target[j]);
            }
            System.out.println();
          }
          else {
            continue;
          }
        }
      } 
    }
  }

}

九度OJ--Q1165的更多相关文章

  1. 九度oj 题目1087:约数的个数

    题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...

  2. 九度OJ 1502 最大值最小化(JAVA)

    题目1502:最大值最小化(二分答案) 九度OJ Java import java.util.Scanner; public class Main { public static int max(in ...

  3. 九度OJ,题目1089:数字反转

    题目描述: 12翻一下是21,34翻一下是43,12+34是46,46翻一下是64,现在又任意两个正整数,问他们两个数反转的和是否等于两个数的和的反转. 输入: 第一行一个正整数表示测试数据的个数n. ...

  4. 九度OJ 1500 出操队形 -- 动态规划(最长上升子序列)

    题目地址:http://ac.jobdu.com/problem.php?pid=1500 题目描述: 在读高中的时候,每天早上学校都要组织全校的师生进行跑步来锻炼身体,每当出操令吹响时,大家就开始往 ...

  5. 九度OJ 1531 货币面值(网易游戏2013年校园招聘笔试题) -- 动态规划

    题目地址:http://ac.jobdu.com/problem.php?pid=1531 题目描述: 小虎是游戏中的一个国王,在他管理的国家中发行了很多不同面额的纸币,用这些纸币进行任意的组合可以在 ...

  6. 九度OJ 1024 畅通工程 -- 并查集、贪心算法(最小生成树)

    题目地址:http://ac.jobdu.com/problem.php?pid=1024 题目描述:     省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但 ...

  7. 九度OJ 1371 最小的K个数 -- 堆排序

    题目地址:http://ac.jobdu.com/problem.php?pid=1371 题目描述: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4 ...

  8. 九度OJ 题目1384:二维数组中的查找

    /********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...

  9. hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人

    钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  10. 九度oj题目&amp;吉大考研11年机试题全解

    九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码).    http://ac.jobdu.com/problem.php?pid=11 ...

随机推荐

  1. AngularJS 使用 uppercase 过滤器的表格

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  2. py faster rcnn的lib编译出错问题

    真是好事多磨啊,计算机系统依然是14.04,而cuda依然是8.0,唯一不同的是时间不一样,下载的各种库版本有差别,GPU的driver不一样. 但是这样就出问题了,py-faster rcnn的li ...

  3. WKWebView简单使用及关于缓存的问题

    Xcode8发布以后,编译器开始不支持IOS7,所以很多应用在适配IOS10之后都不在适配IOS7了,其中包括了很多大公司,网易新闻,滴滴出行等.因此,我们公司的应用也打算淘汰IOS7.支持到IOS8 ...

  4. Spring框架中的IOC?

    Spring中的org.springframework.beans包和org.SpringframeWork.context包构成了Spring框架IOC容器的基础.BeanFactory接口提供了一 ...

  5. vue和react总结

    一.总结一下Vue和React的区别 相同点:   1.都支持服务器端渲染     2.都有Virtual DOM,组件化开发,通过props参数进行父子组件数据的传递,都实现webComponent ...

  6. 使用Ansible实现nginx+keepalived高可用负载均衡自动化部署

    本篇文章记录通过Ansible自动化部署nginx的负载均衡高可用,前端代理使用nginx+keepalived,端web server使用3台nginx用于负载效果的体现,结构图如下: 部署前准备工 ...

  7. cefsharp作为采集工具(学习笔记)

    cefsharp(webkit内核)浏览器替代webbrowser用来采集页面数据. 需要在页面form加载完毕,用异步方式自动获取sourcecode. 由于国内cefsharp的资料相对比较少,在 ...

  8. [异常笔记]required a bean of type 'org.quartz.JobExecutionContext' that could not be found

    *************************** APPLICATION FAILED TO START *************************** Description: Par ...

  9. VULTR的VPS在centos的操作系统中出现网站无法访问 80端口被firewall禁止

    导语:叶子在为一位客户配置web服务器环境的时候,出现网站不能访问的情况,但ping正常.客户的服务器是在VULTR上购买的VPS,安装的操作系统为centos 7.3.经过叶子的分析,认为是防火墙阻 ...

  10. angularjs路由不断刷新当前页面

    最近做项目遇到个问题,使用angular-route的时候,第一次点击 [按钮 a]会进入按钮a对应的控制器,接着再次点击a按钮的的时候就不会进入控制器了.我想要的效果是每次点击都能进入control ...