Алгоритмическое мышление при решении задач (на примере языка C#). Шамшев А.Б - 40 стр.

UptoLike

Составители: 

40
6.20. Однако если присмотреться внимательнее, то можно увидеть, что
решение задачи можно еще оптимизировать. В processString после
оптимизации 6.18 мы «перепрыгиваем» через слово. Тогда ситуация
рассмотрения букв, которые стоят посередине слова, исключена.
Поэтому логика функции IsBeginOfWord может быть сокращена
через убирание соответствующей развилки следующим образом:
public static bool isBeginOfWord(string str, int index) {
if (isSeparator(str[index])) {
return false;
}
if (index == 0) {
return true;
}
return true;
}
Этот код еще можно сократить
public static bool isBeginOfWord(string str, int index) {
if (isSeparator(str[index])) {
return false;
}
return true;
}
И потом еще раз сократить
public static bool isBeginOfWord(string str, int index) {
return (isSeparator(str[index]) == false);
}
Из-за того, что реализация функции занимает одну строку, саму функцию
можно не вводить. Поэтому еще более оптимизированный вариант реализации
будет иметь следующий код:
using System;
using System.Linq;
namespace ConsoleApplication17 {
class Program {
public static bool needDelWord(string word) {
return word.Contains('a');
}
private static bool isSeparator(char c) {
string oneCharStr = "" + c;
return " .,?!".Contains(oneCharStr);
}
public static int getWordLength(string str, int index) {
int res = 0;
for (int i = index; i < str.Length; i++) {
if (isSeparator(str[i])) {
break;
}
res = res + 1;