对于每个密码排好序,遍历原串里连续的八个字符并将其排好序,这样去比较子串是不是出现过,
用map存每个子串的出现次数, 遍历主串直接查表
import java.util.*;
public class Main{
static HashMap<String,Integer> map = new HashMap();
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String s = sc.next();
int n = sc.nextInt();
for(int i=0;i<n;i++){
String s1 = sc.next();
s1 = sort(s1, 0, 8);
mapPlus(s1);
}
int res = 0;
int m = s.length();
for(int i=0; i<=m-8;i++){
String s1 = s.substring(i, i+8);
s1 = sort(s1, 0, 8);
res += mapGet(s1);
}
System.out.println(res);
}
static void mapPlus(String s){
Integer cnt = map.get(s);
if(cnt == null) map.put(s,1);
else {
map.replace(s,cnt+1);
}
}
static int mapGet(String s){
Integer cnt = map.get(s);
if(cnt == null ) return 0;
return cnt;
}
static String sort(String s,int l,int len){
char c[] = s.substring(l,len).toCharArray();
Arrays.sort(c,l,len);
s = new String(c);
return s;
}
}