Тесты проходят. Но он страшный. Поэтому уверенности нет. Хотелось одобрения экспертов.
Не знаю, как там эксперты, а я не одобряю.
И метод разработки (метод тыка) и результат - ужасны.
Как при таком методе получилось нечто работоспособное - для меня большая загадка.
Вот что дает осмысленное проектирование.
Кому надо, перепишет с C# на смесь JS и Оберона:
static bool isReservedWorld(string s, string words) {
int i = 0, w = 0;
bool prevEq = true;
while (true) {
if (prevEq && (w < words.Length) && (i < s.Length) && (words[w] == s[i])) {
w++;
i++;
} else if (prevEq && (w < words.Length) && (i < s.Length) && /*это избыточно*/ (words[w] != s[i])) {
prevEq = false;
i = 0;
} else if (w < words.Length && !prevEq) {
if (words[w] == ' ') {
prevEq = true;
}
w++;
} else {
break;
}
}
return i == s.Length;
}
По поводу цикла Дейкстры - два наблюдения. Не помню, были ли они раньше.
1. Во многих случаях ЦД - это смешение разных уровней абстракций. И это плохо.
2. Во много благодаря п.1 ЦД весьма похож на реализацию конечного автомата. Только состояния здесь обычно не вводятся явно, а вычисляются из переменных на каждом шаге. Отсюда - неэффективность. Тоже плохо.
p.s. забыл отметить, что ключевые слова должны быть разделены ровно одним пробелом.