九度OJ--Q1165

來源:互聯網
上載者:User

標籤:

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

}

九度OJ--Q1165

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.