【问题标题】:HackerRank - No Prefix Set not passing all the test casesHackerRank - 没有前缀集没有通过所有的测试用例
【发布时间】:2015-09-08 08:50:31
【问题描述】:

我试图解决 HackerRank 上的 No Prefix Set 问题。我的解决方案仅通过了一半的测试用例。我没有得到我在这里缺少的东西。

问题陈述:给定 N 个字符串。每个字符串仅包含来自a−j(包括两者)的小写字母。 N 个字符串的集合称为GOOD SET,如果没有字符串是另一个字符串的前缀,则为BAD SET

例如:aababcdeaabcdBAD SET,因为aabaabcd 的前缀。

这是我实现的逻辑。

class Trie {
  Trie next[] = new Trie[10];
  boolean end[] = new boolean[10];
}

private static void goodOrBad(String[] array, Trie start) {
  for (String string : array) {
    Trie current = start;
    Trie previous = start;
    int index = 0;
    char strArray[] = string.toCharArray();
    for (char c : strArray) {
      index = c-'a';
      if (current.end[index]) {
        System.out.println("BAD SET");
        System.out.println(string);
        return;
      }
      if (current.next[index] == null) {
        Trie newTrie = new Trie();
        current.next[index] = newTrie;
        previous = current;
        current = newTrie;
      }
      else {
        previous = current;
        current = current.next[index];
      }
    }
    previous.end[index] = true;
  }
  System.out.println("GOOD SET");
}

输入:
第一行包含 N,即集合中的字符串数。
然后接下来是 N 行,其中第 i 行包含第 i 个字符串。

输出:
如果集合有效,则输出 GOOD SET
否则,输出 BAD SET 后跟条件失败的 first string

示例:
4
aab
aac
啊啊啊
呸呸呸

输出:
坏套装
呵呵

【问题讨论】:

    标签: java data-structures trie


    【解决方案1】:

    问题是您只检查当前单词是否包含前一个单词作为前缀。

    您还必须检查当前单词是否是 Trie 中已有单词的前缀。

    【讨论】:

      【解决方案2】:

      让它变得简单 -

      1. 从给定的集合中创建一个排序列表。
      2. 遍历这个列表,对于列表中的每个元素,只需检查下一个元素是否startsWith()这个元素。如果是,则返回 BAD SET。
      3. 如果第 2 步从不返回 BAD SET,则返回 GOOD SET。

      复杂性 -> O(n * log n) 由于排序。

      【讨论】:

      • 我猜现有的解决方案是 O(n)。我只遍历字符串数组一次。在最坏的情况下是 O(n),因为当我在另一个中找到前缀时,它会输出消息并返回。
      • 这个没有线性时间复杂度,startsWith()不是一个常数时间运算。
      • 通过对列表进行排序,我们将改变元素的顺序。输出应该是我们迄今为止处理的字符串列表中具有前缀的第一个元素。请检查问题页面上的Sample Input01
      • @abhishekbafna - 由于您的原始输入是一组,因此排序无关紧要。但是排序将使我们的前缀比较更快,因为我们只需要与下一个项目进行比较。
      • @RamanShrivastava 我用另一个例子更新了这个问题。请检查。
      猜你喜欢
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-16
      相关资源
      最近更新 更多