省略一组名称

Ken*_*Ken 9 algorithm ellipsis

好吧,我确定某个人,某个地方必须已经为此提出了一个算法,所以我想在我开始(重新)发明它之前我会问.

我有一个任意(用户输入)非空文本字符串的列表.每个字符串可以是任意长度(0除外),它们都是唯一的.我想将它们显示给用户,但我想将它们修剪为我决定的固定长度,并用省略号(...)替换它们中的一部分.问题是我希望所有输出字符串都是唯一的.

例如,如果我有字符串:

  • Microsoft Internet Explorer 6
  • Microsoft Internet Explorer 7
  • Microsoft Internet Explorer 8
  • Mozilla Firefox 3
  • Mozilla Firefox 4
  • 谷歌Chrome 14

然后我不想修剪字符串的末尾,因为这是独特的部分(不想显示"Microsoft Internet ..."3次),但是切出中间部分是可以的:

  • 微软... rer 6
  • 微软...... rer 7
  • 微软... rer 8
  • Mozilla Firefox 3
  • Mozilla Firefox 4
  • 谷歌Chrome 14

其他时候,中间部分可能是唯一的,我想修剪结束:

  • 公司会议纪要,2010年5月25日 - 仅供内部使用
  • 公司会议纪要,2010年6月24日 - 仅供内部使用
  • 公司会议纪要,2010年7月23日 - 仅供内部使用

可能成为:

  • 公司会议纪要,2010年5月25日......
  • 公司会议纪要,2010年6月24日......
  • 公司会议纪要,2010年7月23日......

我想它应该永远不会在字符串的开头进行椭圆化,即使这样也是允许的,因为这看起来很奇怪.而且我猜它可能会在字符串中超过一个位置,但在合理范围内 - 可能2次就可以了,但是3次或更多似乎过多了.或者可能的次数不如剩余的块的大小重要:椭圆之间少于约5个字符将是毫无意义的.

输入(数量和大小)都不会非常大,因此性能不是主要问题(好吧,只要算法不会尝试愚蠢的事情,就像枚举所有可能的字符串一样,直到它找到一个有效的集合!) .

我想这些要求看起来非常具体,但我实际上相当宽松 - 我只是想描述一下我的想法.

之前有过这样的事吗?是否有一些现有的算法或库可以做到这一点?我用Google搜索了一些但到目前为止没有发现任何类似的内容(但也许我只是在谷歌上搜索).我不得不相信某个人已经想要解决这个问题了!

eri*_*son 3

这听起来像是最长公共子串问题的应用

用省略号替换所有字符串共有的最长子字符串。如果字符串仍然太长并且允许您使用另一个省略号,请重复。

您必须意识到,您可能无法“省略”给定的一组字符串以满足长度要求。