Задачи
October 23, 2023

Задача. Квадрад слов

Задача. Верните true, если он образует правильный квадрат слов. То есть последовательность строк образует правильный квадрат слов, если в k-й строке и столбце читается одна и та же строка, где 0 <= k < max(numRows, numColumns).

Входные данные: размер массивов от 1 до 500, количество массивов от 1 до 500. Элементы массивов - прописные буквы английского алфавита.

Пример:

"abcd",
"bnrt",
"crm",
"dt"

Output: true

Разбор

Так как нам нужно проверить все слова в матрице, то нам придется делать полный проход по матрице. Единственное, что мы можем оптимизировать - мгновенный выход из циклов, если мы нашли 1-ю "ошибку" в правильном квадрате слов.

Условием для выхода будем набор нескольких условий: если текущая строка/столбец больше чем размер текущего слова или если words[i][j] != words[j][i].

Реализация

public static bool CheckWordSquare(List<string> words) 
{
	int len = words.Count;

	for(int i = 0; i < len; i++)
	{
	    for(int j = 0; j < words[i].Length; j++)
	    {
		if (j >= len || words[j].Length <= i || words[j][i] != words[i][j])
		    return false;
	    }
	}

	return true;
}

https://gist.github.com/unilecs/06daa2fc302d2b7f0f1630b8d4c523df

Play-test

https://dotnetfiddle.net/rXwpoZ