ВУЗ:
Составители:
Рубрика:
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;
}
}
Страницы
- « первая
- ‹ предыдущая
- …
- 36
- 37
- 38
- 39
- 40
- …
- следующая ›
- последняя »
