java-BD5 字符串匹配
import java.util.HashSet;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNext()){
solution1(in);
solution2(in);
solution3(in);
}
}
/**
* 正则: sub.matches(regex)
* @param in
*/
private static void solution1(Scanner in){
String source = in.nextLine();
String part = in.nextLine();
String regex = part.replaceAll("\\?", "[0-1]");
// String regex = part.replaceAll("\\?", "[01]{1}");
HashSet<String> set = new HashSet<>();
int len = source.length();
int gap = part.length();
String sub;
for(int i=0; i+gap<=len; i++){
sub = source.substring(i, i+gap);
if(sub.matches(regex)){
set.add(sub);
}
}
System.out.println(set.size());
}
/**
* 正则: matcher.matches()
* @param in
*/
private static void solution2(Scanner in){
String source = in.nextLine();
String part = in.nextLine();
Pattern pattern = Pattern.compile(part.replaceAll("\\?", "[0-1]"));
Matcher matcher;
HashSet<String> set = new HashSet<>();
int len = source.length();
int gap = part.length();
String sub;
for(int i=0; i+gap<=len; i++){
sub = source.substring(i, i+gap);
matcher = pattern.matcher(sub);
if(matcher.matches()){
set.add(sub);
}
}
System.out.println(set.size());
}
/**
* 正则: matcher.find()
* @param in
*/
private static void solution3(Scanner in){
String source = in.nextLine();
String part = in.nextLine();
Pattern pattern = Pattern.compile(part.replaceAll("\\?", "[0-1]"));
Matcher matcher;
HashSet<String> set = new HashSet<>();
int len = source.length();
int gap = part.length();
String matched;
for(int i=0; i+gap<=len; i++){
matcher = pattern.matcher(source.substring(i, i+gap));
if(matcher.find()){
matched = matcher.group();
set.add(matched);
}
}
System.out.println(set.size());
}
}