-
Notifications
You must be signed in to change notification settings - Fork 109
Expand file tree
/
Copy pathSubarrayArray.java
More file actions
85 lines (79 loc) · 4.49 KB
/
SubarrayArray.java
File metadata and controls
85 lines (79 loc) · 4.49 KB
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package subarray_array;
import java.io.*;
import java.util.*;
public class SubarrayArray {
private static ArrayList<String> data = new ArrayList<>(); // Исходные данные
private static ArrayList<String> arrMain = new ArrayList<>(); // Главный массив, из которого получаем подмассивы
private static ArrayList<String> arrSub = new ArrayList<>(); // Начальные и конечные элементы подмассивов
private static ArrayList<String> arrSubOut = new ArrayList<>(); // Коллекция со всеми подмассивами
private static ArrayList<String> arrSubOutBuild = new ArrayList<>(); // Коллекция для сборки подмассива
private static void getData() throws IOException { // Получение данных из файла и предварительная обработка
FileReader file = new FileReader("input.txt");
Scanner sc = new Scanner(file);
while (sc.hasNextLine()){
data.add(sc.nextLine());
}
StringTokenizer st = new StringTokenizer(data.get(1), " ");
while (st.hasMoreTokens()){
arrMain.add(st.nextToken());
}
for(int i = 3; i < data.size(); i++){
StringTokenizer add = new StringTokenizer(data.get(i), " ");
while (add.hasMoreTokens()){
arrSub.add(add.nextToken());
}
}
}
private static void buildSubArr(){ // Формирование подмассивов на основе данных из файла
for(int j = 0; j < arrSub.size(); j++){
if(j+1 < arrSub.size()){
String start = arrSub.get(j); // Начало подмассива
String finish = arrSub.get(j+1); // Конец подмассива
if(!start.equals(finish)){ // Если начало и конец подмассива не равны
for (int i = 0; i < arrMain.size(); i++){
if(arrMain.get(i).equals(start) && arrSubOutBuild.isEmpty()){ // Если элемент совпадает с началом и при этом массив не пустой
while (!arrMain.get(i).equals(finish)){
if(i == 0){ // Добавляем 1 символ подмассива
arrSubOutBuild.add(arrMain.get(i));
}else if(!arrMain.get(i).equals(arrMain.get(i-1))){ // Проверяем остальные символы массива на одинаковость
arrSubOutBuild.add(arrMain.get(i));
}
i++;
if(i == arrMain.size()){ // Если индекс массива больше длины массива
break;
}
}
arrSubOutBuild.add(finish);
}
}
arrSubOut.add(String.valueOf(arrSubOutBuild).replaceAll(",", "").replaceAll("^\\[|]$", "")); // Заменяем запятые на пробелы, убираем лишнее
arrSubOutBuild.clear();
}else{
arrSubOut.add(start);
}
}
j++;
}
}
private static void removeSameElements(){ // Удаление одинаковых подмассивов
for(int i = 0; i < arrSubOut.size(); i++){ // Удаление одинаковых подмассивов при выводе конечного ответа
String compare = arrSubOut.get(i);
int j;
for(j = i + 1; j < arrSubOut.size(); j++){
if(compare.equals(arrSubOut.get(j))){
arrSubOut.remove(j);
j--;
}
}
}
}
public static void main(String[] args) throws IOException {
getData();
buildSubArr();
removeSameElements();
String result = String.valueOf(arrSubOut).replaceAll(", ", "\n").replaceAll("^\\[|]$", ""); // Формирование строки с конечным результатом
FileWriter fileOut = new FileWriter("output.txt");
fileOut.write(result); // Выавод результата
fileOut.close();
}
}