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;
    }
}

Ответы (0 шт):