java - 如何计算一组字符串的最短唯一前缀?

标签 java algorithm string

这是命令行解析中非常常用的算法。给定一组预定义的长选项名称——计算唯一标识其中一个选项的最短前缀。例如,对于以下选项:

-help
-hostname
-portnumber
-name
-polymorphic

这将是输出:

-he
-ho
-por
-n
-pol

我正在考虑两种可能的方法——或者作为一棵树:

               *
             / | \
            /  |  \
           H   N   P
          / \      |
         E   O     O
                  / \
                 R   L

或者通过搜索子字符串:

for (String s : strings) {
   for (int i = 1; i < s.length(); s++) {
      if (search(strings,s.substring(0,i)) == 1) {
          result.add(s.substring(0,i);
          break;
      }
   }
}

所以,问题是:

  1. 你会选择哪个?
  2. 我是否缺少明显的第三种方式?

最佳答案

“树”解决方案是 Patricia trie 的特例(好吧,实际上它很一般) .

第一个通常查找起来更快。内存注意事项可能与您的上下文无关,因为它不会永久使用并且您只执行一次“查找”。

关于java - 如何计算一组字符串的最短唯一前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3612344/

相关文章:

algorithm - 平衡的树和空间和时间的权衡

algorithm - 下面语句的复杂度是多少?

java - 将字符串中的 `\\r` 替换为 `\r`

java - 奇怪的输出打印到错误屏幕(System.err)

Java, Spring : Create a separate datasource bean throws NonUnique error

algorithm - 查找差值大于或等于 D 的两个元素

Java:使用StringBuilder得到的相同字符串最终不等于

java - 从字符串的数字部分中删除所有前导零

java - 只刷新这部分数据(谷歌地图)

java - 如何在浏览器中显示来自byte[]流的pdf?