【问题标题】:Finding largest match in prefix url在前缀 url 中查找最大匹配
【发布时间】:2021-07-14 03:40:11
【问题描述】:
var urls = List.of(
        "/a/b/c/d",
        "/a/b/a/d",
        "/a/a/c/d",
        "/q/w/e/r/");

var search = "/a/b/c/e/q";

我需要将一个字符串与一个字符串列表进行比较并找到最大的匹配项。字符串可以包含数字和符号 - 可以在 url 中的所有内容。

“搜索”和“网址”比较的结果应该是答案“/a/b/c”。 如何使用 java 解决这个问题?

【问题讨论】:

  • 你在解决这个问题上有什么特别的困难?

标签: java string url


【解决方案1】:

这称为最长前缀匹配,如果性能很重要,则具有efficient solution using a Trie data structure

对于一个简单的解决方案,我不相信任何内置的东西都是现成的。借用longest common prefix implementation,下面是一个直截了当的迭代解决方案:

public String greatestCommonPrefix(String a, String b) {
    int minLength = Math.min(a.length(), b.length());
    for (int i = 0; i < minLength; i++) {
        if (a.charAt(i) != b.charAt(i)) {
            return a.substring(0, i);
        }
    }
    return a.substring(0, minLength);
}

public String longestPrefixMatch(List<String> urls, String search) {
    String prefix = "";
    for (String url : urls) {
        String match = greatestCommonPrefix(url, search);
        if (match.length() > prefix.length()) prefix = match;
    }
    return prefix.substring(0, prefix.length() - 1); // Remove trailing '/'
}

【讨论】:

    猜你喜欢
    • 2011-07-23
    • 1970-01-01
    • 2017-12-05
    • 2019-01-11
    • 2013-06-03
    • 2017-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多