【问题标题】:Check Prefix in an Array检查数组中的前缀
【发布时间】:2021-05-29 10:18:28
【问题描述】:

我得到了正确的输出,但超出了时间限制。

问题: 包含(不一定不同)N 个单词和 Q 个查询的列表 Li。每个查询都包含一个字符串 x。对于每个查询,找出 List Li 中有多少个字符串以字符串 x 为前缀。\

class Solution{
    static List<Integer> prefixCount(int N, int Q, String li[], String query[])
    {
        List<Integer> list = new ArrayList<>();
        int l,c;
        for(int i=0; i<Q; i++){
            c = 0;
             
            for(int j=0; j<N; j++){
                if(li[j].length()>=query[i].length()){
                if(li[j].substring(0,query[i].length()).equals(query[i])){
                    c++;
                }
                }
            }
            list.add(c);
        }
    return list;
    }
}

如何优化上述代码?

【问题讨论】:

  • 您需要使用 Trie 并在每个节点上维护一个计数,以了解您在创建 Trie 时遍历该节点的次数。在此遍历 Trie 以获取前缀之后,节点处的计数就是您的答案

标签: java arrays string methods


【解决方案1】:

使用给定的字符串创建一个 Trie,在每个节点上计算在创建 trie 时该节点被遍历了多少次。

现在对于您遍历数组的每个前缀字符串,如果您成功遍历到 Trie 中的前缀字符串长度,则该前缀字符串的答案在节点处计数,否则答案为 0。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    相关资源
    最近更新 更多