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

UptoLike

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

38
public static void processString(ref string str) {
for (int i = 0; i < str.Length; i++) {
if (isBeginOfWord(str, i) == false) {
continue;
}
int len = getWordLength(str, i);
string word = str.Substring(i, len);
if (needDelWord(word)) {
str = str.Remove(i, len);
}
}
}
6.18. Для дальнейшей оптимизации необходимо учесть, что если слово,
которое начинается в позиции i и занимает длину len элементов не
надо удалять, то все буквы этого слова (кроме первой) не могут быть
началом слова. Поэтому если слово не надо удалять, через него
можно «перепрыгнуть», не рассматривая все его символы. Поэтому
более оптимальная
реализация задачи будет следующая:
public static void processString(ref string str) {
for (int i = 0; i < str.Length; i++) {
if (isBeginOfWord(str, i) == false) {
continue;
}
int len = getWordLength(str, i);
string word = str.Substring(i, len);
if (needDelWord(word)) {
str = str.Remove(i, len);
} else {
i = i + len;
}
}
}
6.19. Задача решена. Для завершения приведем все исходные коды
(некоторые функции можно оптимизировать с точки зрения размера
исходных кодов, но сейчас самым важным было показать алгоритм
решения, поэтому они не оптимизированы):
using System;
using System.Linq;
namespace ConsoleApplication17 {
class Program {
public static bool needDelWord(string word) {
if (word.Contains('a')) {
return true;
} else {
return false;
}
}