Проверка решения падает с ошибкой "Time out Программа работала слишком долго и была закрыта!"
На моих тестовых данных не могу воспроизвести Time out.
package com.javarush.task.task19.task1916;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
/*
Отслеживаем изменения
*/
public class Solution {
public static List<LineItem> lines = new ArrayList<>();
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));) {
String firstFileName = reader.readLine();
String secondFileName = reader.readLine();
List<String> oldLines = new ArrayList<>();
List<String> newLines = new ArrayList<>();
try (BufferedReader bufferedReader1 = new BufferedReader(new FileReader(firstFileName));) {
while (bufferedReader1.ready()) {
oldLines.add(bufferedReader1.readLine());
}
} catch (IOException exception) {
exception.printStackTrace();
}
try (BufferedReader bufferedReader2 = new BufferedReader(new FileReader(secondFileName));) {
while (bufferedReader2.ready()) {
newLines.add(bufferedReader2.readLine());
}
} catch (IOException exception) {
exception.printStackTrace();
}
int j = 0;
for (int i = 0; i < oldLines.size(); ) {
if (j < newLines.size() && i < oldLines.size() - 1 && oldLines.get(i + 1).trim().equals(newLines.get(j).trim())) {
lines.add(new LineItem(Type.REMOVED, oldLines.get(i)));
i++;
} else if (j + 1 < newLines.size() && oldLines.get(i).trim().equals(newLines.get(j + 1).trim())) {
lines.add(new LineItem(Type.ADDED, newLines.get(j)));
j++;
}
if (j < newLines.size() && oldLines.get(i).trim().equals(newLines.get(j).trim())) {
lines.add(new LineItem(Type.SAME, oldLines.get(i)));
i++;
j++;
}
if (j == newLines.size() && i == oldLines.size() - 1) {
lines.add(new LineItem(Type.REMOVED, oldLines.get(i)));
i++;
}
if (j == newLines.size() - 1 && i == oldLines.size()) {
lines.add(new LineItem(Type.ADDED, newLines.get(j)));
j++;
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static enum Type {
ADDED, //добавлена новая строка
REMOVED, //удалена строка
SAME //без изменений
}
public static class LineItem {
public Type type;
public String line;
public LineItem(Type type, String line) {
this.type = type;
this.line = line;
}
}
}