Эллипсирование набора имен

Хорошо, я уверен, что кто-то где-то уже должен был придумать алгоритм для этого, поэтому я решил, что спрошу, прежде чем уйду чтобы (заново) изобрести это сам.

У меня есть список произвольных (вводимых пользователем) непустых текстовых строк. Каждая строка может быть любой длины (кроме 0), и все они уникальны. Я хочу показать их пользователю, но хочу обрезать их до некоторой фиксированной длины, которую я выберу, и заменить часть из них многоточием (...). Загвоздка в том, что я хочу, чтобы все выходные строки были уникальными.

Например, если у меня есть строки:

  • Microsoft Internet Explorer 6
  • Microsoft Internet Explorer 7
  • Microsoft Internet Explorer 8
  • ] Mozilla Firefox 3
  • Mozilla Firefox 4
  • Google Chrome 14

, тогда я бы не хотел обрезать концы строк, потому что это ' так как это выглядело бы странно. И я предполагаю, что он может растягивать более одного места в строке, но в пределах разумного - возможно, 2 раза будет нормально, но 3 или более кажется чрезмерным. Или, может быть, количество раз не так важно, как размер оставшихся кусков: менее 5 символов между эллипсами было бы бессмысленно.

Входные данные (как количество, так и размер) не будут ужасно большими, поэтому производительность не является серьезной проблемой (ну, если алгоритм не пытается сделать что-то глупое, например перечисление всех возможных строк, пока не найдет набор, который работает!).

Я думаю, эти требования кажутся довольно конкретными, но я ' m на самом деле довольно снисходительно - я просто пытаюсь описать то, что имею в виду.

Было ли что-то подобное уже сделано раньше? Есть ли какой-нибудь существующий алгоритм или библиотека, которая делает это? Я' Я немного погуглил, но пока не нашел ничего похожего (но, может быть, я просто плохо разбираюсь в гугле). Я должен поверить, что кто-то где-то уже хотел решить эту проблему!

9
задан Ken 14 February 2011 в 20:08
поделиться