【发布时间】:2015-09-08 08:50:31
【问题描述】:
我试图解决 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
啊啊啊
呸呸呸
输出:
坏套装
呵呵
【问题讨论】:
标签: java data-structures trie