Другие предложили отсортировать строку и проверить, изменяется ли массив при сортировке.Это не совсем верно, поскольку строка «abcxyz» находится в отсортированном порядке, но не является последовательностью, потому что в ней отсутствуют некоторые символы.Сортировка также относительно дорога, по крайней мере, на больших массивах.(Не проблема, если вы имеете дело с несколькими сотнями символов, так как производительность O(n•log n)
хорошего алгоритма сортировки в значительной степени равна O(n)
производительности для небольших наборов данных.)
Как насчет этого расширения в StringЯ придумал:
extension String {
func isSequence() -> Bool
{
let charValues = Array(self.unicodeScalars).map { $0.value }
guard let first = charValues.first,
let last = charValues.last else { return false }
return charValues == Array(first...last)
}
}
Он отображает строку в массив значений UTF32, а затем проверяет, совпадает ли результат с диапазоном значений first...last
.
Вы можете использовать эту функцию для проверки ввода текста пользователем, чтобы увидеть, является ли это непрерывной последовательностью символов, таких как «abcdefg».
Выше должно быть O(n)
сложность времени.