藍橋杯演算法提高——字串匹配(Java)

千燈23發表於2020-11-08

藍橋杯演算法提高——字串匹配

問題描述
  給出一個字串和多行文字,在這些文字中找到字串出現的那些行。
  你的程式還需支援大小寫敏感選項:
   當選項開啟時,表示同一個字母的大寫和小寫看作不同的字元;
  當選項關閉時,表示同一個字母的大寫和小寫看作相同的字元。

輸入格式
  輸入的第一行包含一個字串S,由大小寫英文字母組成。
  
  第二行包含一個數字,
  表示大小寫敏感的選項,當數字為0時表示大小寫不敏感,
  當數字為1時表示大小寫敏感。
  
  第三行包含一個整數n,表示給出的文字的行數。
  
  接下來n行,每行包含一個字串,字串由大小寫英文字母組成,不含空格和其他字元。
  
輸出格式
  輸出多行,每行包含一個字串,按出現的順序依次給出那些包含了字串S的行。

樣例輸入
Hello
1
5
HelloWorld
HiHiHelloHiHi
GrepIsAGreatTool
HELLO
HELLOisNOTHello

樣例輸出
HelloWorld
HiHiHelloHiHi
HELLOisNOTHello

樣例說明
  在上面的樣例中,第四個字串雖然也是Hello,但是大小寫不正確。
  如果將輸入的第二行改為0,則第四個字串應該輸出。

題目解析


在大小寫不敏感(即判定條件為0)的情況下,該如何判定給定字串是否存在於後續輸入字串中,我採取的辦法是,將兩個字串都轉換為大寫形式,然後再利用contains函式判斷,最終寫作:

if(str[i].toUpperCase().contains(s.toUpperCase()))

至於大小寫敏感的情況下,直接採用contains函式判定即可:

if(str[i].contains(s))


import java.util.*;
public class Main{
	public static void main(String[] args){
		Scanner in=new Scanner(System.in);
		String s=in.next();
		int m=in.nextInt();
		int n=in.nextInt();
		String str[]=new String[n];
		for(int i=0;i<n;i++){
			str[i]=in.next();
		}
		for(int i=0;i<n;i++){
			if(m==0){
					if(str[i].toUpperCase().contains(s.toUpperCase())){
					
						System.out.println(str[i]);
				}
			}
			else{
				if(str[i].contains(s)){
					System.out.println(str[i]);
				}
			}
		}
	}
}

相關文章