Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何正确检查trie中是否存在单词前缀?_Java_Trie - Fatal编程技术网

Java 如何正确检查trie中是否存在单词前缀?

Java 如何正确检查trie中是否存在单词前缀?,java,trie,Java,Trie,目前,我已将Trie类的“searchPrefix”函数定义为: public Boolean searchPrefix(String word) { TrieNode temp = this.root; for(int i = 0; i < word.length(); i++){ if(temp.children.get(word.charAt(i)) == null) return false; else temp = temp.chi

目前,我已将Trie类的“searchPrefix”函数定义为:

public Boolean searchPrefix(String word) {
    TrieNode temp = this.root;
    for(int i = 0; i < word.length(); i++){
        if(temp.children.get(word.charAt(i)) == null) return false;
        else temp = temp.children.get(word.charAt(i));
    }
    return (temp.children.isEmpty()) ? false : true;
}
公共布尔搜索前缀(字符串字){
三节点温度=this.root;
for(int i=0;i
当输入字符串是trie对象内部存在的单词的前缀时,此函数应返回“true”。以下是三元组课程供参考:

class TrieNode {
   Character c;
   Boolean isWord = false;
   HashMap<Character, TrieNode> children = new HashMap<>();

   public TrieNode() {}
   public TrieNode(Character c) {
    this.c = c;
   }
}
类三节点{
字符c;
布尔值isWord=false;
HashMap children=newhashmap();
公共三元组({}
公共三元组(字符c){
这个.c=c;
}
}

根据这个在线判断,我错误地判断给定的输入字符串是否是前缀。有人能解释一下为什么这是一种不正确的方法吗?我的想法是,当我们到达作为输入字符串结尾的节点时,如果该节点有子节点,则它是其他单词的前缀,因此我们返回true。然而,这显然是错误的。

我认为您没有处理前缀在trie中是一个终端词的情况

例如,假设trie中只有一个单词
hello
。 对于
searchPrefix(“hello”)
,您的实现将返回false

要修复它,还需要检查
isWord
标志:

public Boolean searchPrefix(String word) {
    TrieNode temp = this.root;
    for (int i = 0; i < word.length(); i++){
        TrieNode next = temp.children.get(word.charAt(i));
        if (next == null) {
            return false;
        }
        temp = next;
    }
    return !temp.children.isEmpty() || temp.isWord;
}
公共布尔搜索前缀(字符串字){
三节点温度=this.root;
for(int i=0;i
空字符串呢?它被认为是一个有效的前缀吗?指向此在线法官的链接也是无效的missing@Devstr在线法官是firecode.io。此外,由于在线法官的描述模棱两可,我不确定空字符串是否是前缀,但是使用复选框“if(word.length()<1)return true/false”似乎无法解决此问题。请参阅下面的答案