Прошу даже не подсказки по решению, а пример тест-кейса, который моя программа не проходит. То, что код неоптимальный и запутанный, я знаю, принципиально решал сам без подсказок. Вот такие тесты корректно отрабатывает (дефолтный из задачи, разумеется, тоже): поиск "home" в двух вариантах
int[][] crossword = new int[][]{
                {'f', 'd', 'e', 'r', 'l', 'k'},
                {'u', 's', 'a', 'm', 'e', 'o'},
                {'l', 'n', 'g', 'r', 'o', 'v'},
                {'m', 'l', 'e', 'm', 'o', 'h'},
                {'p', 'o', 'e', 'e', 'j', 'j'}
        };
Результат: home - (5, 3) - (2, 0) home - (5, 3) - (2, 3) same - (1, 1) - (4, 1) поиск 8 вариантов "one"
int[][] crossword = new int[][]{
                {'f', 'e', 'e', 'e', 'l', 'e'},
                {'u', 's', 'n', 'n', 'n', 'o'},
                {'l', 'e', 'n', 'o', 'n', 'e'},
                {'m', 'm', 'n', 'n', 'n', 'h'},
                {'p', 'e', 'e', 'e', 'j', 'e'},
        };
Результат: one - (3, 2) - (1, 0) one - (3, 2) - (3, 0) one - (3, 2) - (5, 0) one - (3, 2) - (1, 2) one - (3, 2) - (5, 2) one - (3, 2) - (1, 4) one - (3, 2) - (3, 4) one - (3, 2) - (5, 4) поиск pmlpml
int[][] crossword = new int[][]{
                {'f', 'd', 'e', 'r', 'l', 'k', 'd', 'e', 'r', 'l', 'k'},
                {'u', 's', 'a', 'm', 'e', 'o', 's', 'a', 'm', 'e', 'o'},
                {'l', 'n', 'g', 'r', 'o', 'v', 'n', 'g', 'r', 'o', 'v'},
                {'m', 'l', 'p', 'r', 'r', 'h', 'l', 'p', 'r', 'r', 'h'},
                {'p', 'o', 'e', 'e', 'j', 'j', 'o', 'e', 'e', 'j', 'j'},
                {'l', 'n', 'g', 'r', 'o', 'v', 'n', 'g', 'r', 'o', 'v'},
                {'m', 'l', 'p', 'r', 'r', 'h', 'l', 'p', 'r', 'r', 'h'},
                {'p', 'o', 'e', 'e', 'j', 'j', 'o', 'e', 'e', 'j', 'j'}
        };
Результат: pmlpml - (0, 7) - (0, 2)