zoukankan      html  css  js  c++  java
  • 九度OJ--Q1165

    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;
              }
            }
          } 
        }
      }

    }

  • 相关阅读:
    在使用SMO时,检索IsSystemObject属性将导致性能急剧下降的解决方法
    在没有安装.NET Framework 3.5的机器上使用LINQ等特性
    我的网站中的组织层次结构图信息与AD的同步问题
    有关视图状态(ViewState)的一些问题
    窗体控件visible属性问题
    SiteMapNode的几个特殊属性
    创建本地数据库时发生错误及其解决方案
    在基于Windows验证的Web应用程序中检索当前用户的所有角色
    在数据库恢复之前将数据库置为单用户模式
    将ASP.NET网站嵌入到MOSS站点下面的做法
  • 原文地址:https://www.cnblogs.com/yg6405816/p/5466902.html
Copyright © 2011-2022 走看看