Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package test;
- import java.io.FileReader;
- import java.io.IOException;
- import java.util.HashMap;
- public class test2 {
- public static void main(String[] args) throws IOException {
- HashMap<String, Integer> l = new HashMap<>(); // расстояния между повторами
- int nods[] = new int[500]; // НОД
- String text = ""; //текст
- FileReader fr = new FileReader("text/out.txt");//out.txt
- char[] charArray = new char[500];
- fr.read(charArray);
- fr.close();
- text = new String(charArray);
- // переменные-подстроки для сравнения
- String sub1, sub2;
- char[] s1, s2;
- s1 = new char[3];
- s2 = new char[3];
- //ищем расстояния
- for(int i = 0; i < text.length()-2; i++) {
- //получаем подстроку 1
- sub1 = text.substring(i, i+3);
- for(int j = i + 1; j < text.length()-2; j++) {
- //получаем подстроку 2
- sub2 = text.substring(j, j+3);
- System.out.printf("[%d/%d] [%s] vs [%s]\n", i+i*j, (int)Math.pow(text.length(), 2), sub1,sub2);
- //сравниваем
- if(sub1.equals(sub2)) {
- l.put(sub1, j-i);// равны? пишем расстояние между 1 и 2 в массив
- }
- }
- }
- //вычисляем НОД между всеми комбинациями расстояний и пишем в таблицу
- for(var i : l.values()) {
- for(var j: l.values()) {
- nods[nod(i, j)]++;
- }
- }
- // Ищем какой из НОД самый часто встречающийся
- int keylen = 0;
- for (int i = 2; i < 500; i++)
- if (nods[keylen] < nods[i]) keylen = i;
- System.out.println("Keylen: "+keylen);
- }
- static int nod(int a, int b) {
- for(int i = a; i > 1; --i)
- if((a % i == 0) && (b % i == 0))
- return i;
- return 1;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement