1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
import java.util.Scanner;
public class Main{
private static final int N = 20010; // N 设为静态常量
private static final int M = 26;
private static Integer n;
private static Integer m;
private static char[] s;
private static int[][] cnt=new int[M][M];
private static boolean[][] ans=new boolean[M][M];
public static void main(String agrs[]){
Scanner sc=new Scanner(System.in);
n =sc.nextInt();
m=sc.nextInt();
sc.nextLine();
String S=sc.nextLine();
s=S.toCharArray();
//先将字符转换为数字
for (int i = 0; i < s.length; i++) s[i]-='a';
//先统计原字符串中的哞叫可能
update(0,n-1,1);
for (int i = 0; i < n; i++) {
char t=s[i];
update(i-2,i+2,-1);
for (int j = 0; j < 26; j++) {
if (j!=t){
s[i]= (char) j;
update(i-2,i+2,1);
update(i-2,i+2,-1);
}
}
s[i]=t;
update(i-2,i+2,1);
}
int res=0;
for (int i = 0; i < 26; i++) {
for (int j = 0; j < 26 ; j++) {
if (ans[i][j]) res++;
}
}
System.out.println(res);
for (int i = 0; i < 26; i++) {
for (int j = 0; j < 26 ; j++) {
if (ans[i][j]) {
System.out.println(String.format("%c%c%c", (char) (i + 'a'), (char) (j + 'a'), (char) (j + 'a')));
}
}
}
}
public static void update(int l,int r,int v){
l=Math.max(l,0);
r=Math.min(r,n-1);
for (int i = l; i+2 <= r ; i++) {
char a=s[i],b=s[i+1],c=s[i+2];
if(a!=b&&b==c){
cnt[a][b]+=v;
if (cnt[a][b]>=m) ans[a][b]=true;
}
}
}
}
|