Advertisement
Guest User

Untitled

a guest
Nov 12th, 2019
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.72 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5.  
  6.  
  7.  
  8. namespace Autocomplete
  9. {
  10. // Внимание!
  11. // Есть одна распространенная ловушка при сравнении строк: строки можно сравнивать по-разному:
  12. // с учетом регистра, без учета, зависеть от кодировки и т.п.
  13. // В файле словаря все слова отсортированы методом StringComparison.OrdinalIgnoreCase.
  14. // Во всех функциях сравнения строк в C# можно передать способ сравнения.
  15. public class LeftBorderTask
  16. {
  17. /// <returns>
  18. /// Возвращает индекс левой границы.
  19. /// То есть индекс максимальной фразы, которая не начинается с prefix и меньшая prefix.
  20. /// Если такой нет, то возвращает -1
  21. /// </returns>
  22. /// <remarks>
  23. /// Функция должна быть рекурсивной
  24. /// и работать за O(log(items.Length)*L), где L — ограничение сверху на длину фразы
  25. /// </remarks>
  26. public static int GetLeftBorderIndex(IReadOnlyList<string> phrases, string prefix, int left, int right)
  27. {
  28. if (left == right - 1)
  29. return left;
  30. var middle = (left + right) / 2;
  31. return string.Compare(prefix, phrases[middle]) == 1
  32. ? GetLeftBorderIndex(phrases, prefix, middle, right)
  33. : GetLeftBorderIndex(phrases, prefix, left, middle);
  34. }
  35. }
  36. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement