EOF в конце строки
нужно было решить такую простую задачу:
После чая с печеньками ребята решили поиграть в игру. Дан набор строк одинаковой длины, состоящих из маленьких латинских букв. Нужно определить, какое минимальное число позиций в каждой из строк нужно удалить, чтобы буквы в строках, соответствующие каждому индексу из оставшихся, были лексикографически отсортированы по неубыванию (то есть последовательности, читающиеся сверху вниз, должны быть отсортированы по неубыванию). Как происходит удаление – один столбец полностью берет и уничтожается.
Пример 1:
Ввод:
3
3
cba
daf
ghi
Вывод: 1
Если кратко, то мой алгоритм работает так, сначала записываю в двумерный массив строки, затем извлекаю эти строки по столбцам и сравниваю с такой же строкой, но отсортированной, и если они не совпадают, то прибавляю к счетчику 1. В концу вывожу счетчик. Проблема заключается в том, что тестовая система с последней строкой подает EOF. То есть на первом примере это выглядит так:
cba
daf
ghi^D
считываю строки через BufferedReader.readline() И не знаю, как обработать EOF, чтобы при этом сохранить содержание строки.
Вот алгоритм:
public class F {
public static void main(String[] args) {
try {
new F().run();
} catch (IOException e) {
e.printStackTrace();
}
}
StreamTokenizer in;
PrintWriter out;
private void run() throws IOException {
in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
out = new PrintWriter(System.out);
solve();
out.flush();
}
private void solve() throws IOException {
int amountOfDeleting = 0;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int amountStrs = nexInt();
int lenOfSrt = nexInt();
String[][] strs = new String[amountStrs][lenOfSrt];
for (int i = 0; i < amountStrs; i++) {
strs[i] = br.readLine().split("");
}
ArrayList<String> list = new ArrayList<>();
for (int j = 0; j < lenOfSrt; j++) {
for (int i = 0; i < amountStrs; i++) {
list.add(strs[i][j]);
}
if (!(list.stream().sorted().collect(Collectors.toList()).equals(list))) {
amountOfDeleting++;
}
list.clear();
}
out.print(amountOfDeleting);
}
private int nexInt() throws IOException {
in.nextToken();
return (int)in.nval;
}
}