我试图解决HackerRank上的No Prefix Set问题。我的解决方案只传递了一半的测试用例。我没有得到我在这里失踪的东西。
问题陈述:给定N个字符串。每个字符串仅包含a−j
的小写字母(包括两者)。如果没有字符串是另一个字符串的前缀,那么N个字符串的集合被称为 GOOD SET ,它是 BAD SET 。
例如:,aab
,abcde
,aabcd
BAD SET ,因为aab
是前缀aabcd
。
这是我实施的逻辑。
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
aacghgh
aabghgh
输出继电器:
BAD SET
aacghgh
答案 0 :(得分:1)
让它变得简单 -
startsWith()
这个元素。如果是,则返回BAD SET。复杂性 - >因排序而导致O(n * log n)。