Чтобы найти 4 диагональных слова, я бы попытался выполнить следующие действия:
- Найти слово TopLeftBottomRight
- перевернуть его
- Найти слово TopRightBottomLeft
- перевернуть его
- найти пример слова в приведенных выше списках слов.
Рабочий код для поиска всех 4 диагональных слов
public class Main {
public static void main(String[] args) {
char[][] testData = {{'a', 'b', 'c', 'd'}, {'e', 'c', 'b', 'e'}, {'h', 'g', 'a', 'm'}, {'w', 'x', 'z', 't'}};
char[] sample = {'c', 'a', 't'};
boolean result = findInDiagonalWords(diagonalWords(testData),sample);
System.out.println(result);
}
private static List<String> diagonalWords(char[][] testData) {
String first = topLeftBottomRight(testData);
StringBuilder sb = new StringBuilder();
sb.append(first);
String second = sb.reverse().toString();
String third = bottomLeftTopRight(testData);
StringBuilder sb1 = new StringBuilder();
sb1.append(third);
String fourth = sb1.reverse().toString();
return Arrays.asList(first, second, third, fourth);
}
private static String topLeftBottomRight(char[][] testData) {
String topLeftBottomRight = "";
for (int i = 0; i < testData.length; i++) {
for (int j = 0; j <= i; j++) {
if (i == j) {
topLeftBottomRight = topLeftBottomRight + testData[i][j];
}
}
}
return topLeftBottomRight;
}
private static String bottomLeftTopRight(char[][] testData) {
String bottomLeftTopRight = "";
for (int i = testData.length; i > 0; i--) {
for (int j = 0; j < testData.length; j++) {
if ((testData.length - i) == j) {
bottomLeftTopRight = bottomLeftTopRight + testData[i - 1][j];
break;
}
}
}
return bottomLeftTopRight;
}
private static boolean findInDiagonalWords(List<String> diagonalWords, char[] sample) {
// return true if sample lies in diagonal words
//return false;
}
}