CCF試題Java-字串匹配
阿新 • • 發佈:2018-12-16
import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Scanner; /** * 問題描述 給出一個字串和多行文字,在這些文字中找到字串出現的那些行。你的程式還需支援大小寫敏感選項:當選項開啟時,表示同一個字母的大寫和小寫看作不同的字元;當選項關閉時,表示同一個字母的大寫和小寫看作相同的字元。 輸入格式 輸入的第一行包含一個字串S,由大小寫英文字母組成。 第二行包含一個數字,表示大小寫敏感的選項,當數字為0時表示大小寫不敏感,當數字為1時表示大小寫敏感。 第三行包含一個整數n,表示給出的文字的行數。 接下來n行,每行包含一個字串,字串由大小寫英文字母組成,不含空格和其他字元。 輸出格式 輸出多行,每行包含一個字串,按出現的順序依次給出那些包含了字串S的行。 樣例輸入 Hello 1 5 HelloWorld HiHiHelloHiHi GrepIsAGreatTool HELLO HELLOisNOTHello 樣例輸出 HelloWorld HiHiHelloHiHi HELLOisNOTHello 樣例說明 在上面的樣例中,第四個字串雖然也是Hello,但是大小寫不正確。如果將輸入的第二行改為0,則第四個字串應該輸出。 評測用例規模與約定 1<=n<=100,每個字串的長度不超過100。 * @author llp * */ public class MatchString { public static List<String> list = new ArrayList<>(); public static void main(String[] args) { Scanner sc = new Scanner(System.in); String src = sc.nextLine(); int check = Integer.parseInt(sc.nextLine()); int n = Integer.parseInt(sc.nextLine()); for(int i = 0 ; i < n ; i++) { if(check == 0) //當check為0的時候 表示大小寫不敏感 MatchCaseIngore(src,sc.nextLine()); else //當check為1的時候 表示大小寫敏感 MatchCaseSensitive(src,sc.nextLine()); } //遍歷list 輸出匹配的字串 Iterator<String> iterator = list.iterator(); while(iterator.hasNext()) { System.out.println(iterator.next()); } } //大小寫敏感匹配 public static void MatchCaseSensitive(String src,String desc) { int j = 0; int count; int temp = 0; boolean flag = true; while(j < desc.length() && flag) { count = 0; temp++; for(int i = 0 ; i < src.length() ; i++) { if(src.charAt(i) == desc.charAt(j)) { j++; count++; if(count == src.length()) { list.add(desc); flag = false; break; } } else { j = temp; break; } } } } //大小寫不敏感匹配 public static void MatchCaseIngore(String src,String desc) { int j = 0; int count; int temp = 0; boolean flag = true; while(j < desc.length() && flag) { count = 0; temp++; for(int i = 0 ; i < src.length() ; i++) { if(src.charAt(i) == desc.charAt(j) || Math.abs((int)src.charAt(i) - (int)desc.charAt(j)) == 32) { j++; count ++; if(count == src.length()) { list.add(desc); flag = false; break; } } else { j = temp; break; } } } } }