trie树的模板题,主要写写给大家一个trie的板子,这里我们存入字符串后,只需要在查询时,我们
依次相加end数组,直到节点序号为0为止。
上代码:
import java.awt.FontFormatException;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.lang.reflect.AnnotatedWildcardType;
import java.math.BigInteger;
import java.sql.SQLIntegrityConstraintViolationException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.Map;
import java.util.PriorityQueue;
import java.util.Scanner;
import java.util.Spliterator.OfPrimitive;
import java.util.function.IntToDoubleFunction;
import java.util.function.LongBinaryOperator;
import java.util.TreeMap;
import java.util.TreeSet;
import javax.management.relation.InvalidRelationTypeException;
import javax.print.attribute.standard.JobMessageFromOperator;
import javax.print.attribute.standard.JobPriority;
import javax.swing.table.TableModel;
import javax.swing.text.TabSet;
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc=new Scanner(System.in);
BufferedReader br1=new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw1=new PrintWriter(System.out);
String[] aStrings=br1.readLine().split(" ");
int a=Integer.parseInt(aStrings[0]);
int b=Integer.parseInt(aStrings[1]);
int c=0;
for(c=0;c<a;c++) {
String dString=br1.readLine();
charu(dString);
}
for(c=0;c<b;c++) {
String eString=br1.readLine();
int d=search(eString);
pw1.println(d);
}
pw1.flush();
pw1.close();
}
public static int bb=(int)(1e6+11);
public static int[][] trie=new int[bb][26];
public static int[] end=new int[bb];
public static int cc=1;
public static void charu(String a) {
int b=a.length();
int c=1;
int d=0;
for(d=0;d<b;d++) {
int e=a.charAt(d)-'a';
if(trie[c][e]==0) {
trie[c][e]=++cc;
}
c=trie[c][e];
}
end[c]++;
}
public static int search(String a) {
int answer=0;
int b=a.length();
int c=1;
int d=0;
for(d=0;d<b;d++) {
int e=a.charAt(d)-'a';
c=trie[c][e];
if(c==0) {
return answer;
}
else {
answer=answer+end[c];
}
}
return answer;
}
}