我有以下代码,我试图在TrieNode中实现addWord(..)算法。 AutoCompleteDictionaryTrie.java
public boolean addWord(String word) {
// TODO: Implement this method
char[] chArr = word.toLowerCase().toCharArray();
int length = word.length();
boolean flag = false;
TrieNode tNode = null;
int i = 0;
for (char c: chArr) {
tNode = root.insert(c);
i++;
if (i == length) {
tNode.setEndsWord(true);
flag = true;
}
size++;
return flag;
}
@Override
public boolean isWord(String s) {
// TODO: Implement this method
char[] chArr = s.toLowerCase().toCharArray();
boolean flag = false;
TrieNode tNode = root;
String rStr = "";
int i = 0, length = s.length();
for (char c: chArr) {
tNode = tNode.getChild(c);
rStr += c;
if (i == length && tNode.endsWord()) {
if (rStr.equals(s.toLowerCase()))
flag = true;
}
i++;
}
return flag;
}
如果我先插入addWord(..)
然后再team
tea
,我会NullPointerException
TrieNode.java
public TrieNode getChild(Character c)
{
return children.get(c);
}
public TrieNode insert(Character c)
{
if (children.containsKey(c)) {
return null;
}
TrieNode next = new TrieNode(text + c.toString());
children.put(c, next);
return next;
}
public String getText()
{
return text;
}
public void setEndsWord(boolean b)
{
isWord = b;
}
public boolean endsWord()
{
return isWord;
}
我不想在TrieNode
中添加任何新方法来填充它。我曾尝试使用getChildren()
方法返回HashMap<Character, TrieNode> children
对象,但这也没用。请帮我解决这个问题。我确信我错过了一些东西。
答案 0 :(得分:0)
这是由:
引起的 if (children.containsKey(c)) {
return null;
}
对于插入词团队和茶,他们都以 t 开头,上面的代码将为返回null
>茶一词。但是在下面的代码段中,它仍在调用setEndsWord
,因此会抛出NullPointerException
tNode.setEndsWord(true);