当前位置: 首页 > 知识库问答 >
问题:

使用二分搜索的Java前缀搜索

卫俊誉
2023-03-14

我一直在尝试使用Java的二分搜索方法在单词数组(一个词典)中搜索一个特定的字符串,然后确定该字符串是单词、前缀还是不是单词。如果返回的索引大于或等于零,则字符串为单词。如果返回的索引小于零,那么我必须确定它不是一个单词,还是一个前缀。

    public LexStatus wordStatus(String s) {
    String [] myWordsArray = new String[myWords.size()];
    myWords.toArray(myWordsArray);
    int wordIndex= Arrays.binarySearch(myWordsArray,s);
    if(wordIndex>=0){
        return LexStatus.WORD;
    }
    else{
        int checkIndex = (wordIndex*-1)+1;
        if(checkIndex<=myWords.size()-1){
            String precedingWord= myWords.get(checkIndex);
            String check1=precedingWord.toLowerCase();
            String check2= s.toLowerCase();
            if(check1.startsWith(check2)){
                return LexStatus.PREFIX;
            }
            return LexStatus.NOT_WORD;
        }
        return LexStatus.NOT_WORD;
        }
}

共有1个答案

林劲
2023-03-14

计算checkindex不正确。

binarysearch的文档中,您知道wordindex=(-(插入点)-1)。因此wordindex+1=-(insertion point),所以翻转符号upi后,得到-(wordindex+1)=insertion point

int checkIndex = -(wordIndex+1);

您的代码以相反的顺序执行否定和加法,因此您的代码检查了一个错误的单词。

注意:您在checkindex中看到的词是按词典顺序排在s后面的词,而不是前面的词。因此,您应该将precingword变量重命名为nextword

 类似资料:
  • null 请记住,我是一个非常早期,初学者,婴儿程序员和DIY课,我正在学习的糟糕的解释东西。所以请简单明了。谢谢你。

  • 主要内容:src/runoob/binary/BinarySearch.java 文件代码:一、概念及其介绍 二分搜索树(英语:Binary Search Tree),也称为 二叉查找树 、二叉搜索树 、有序二叉树或排序二叉树。满足以下几个条件: 若它的左子树不为空,左子树上所有节点的值都小于它的根节点。 若它的右子树不为空,右子树上所有的节点的值都大于它的根节点。 它的左、右子树也都是二分搜索树。 如下图所示: 二、适用说明 二分搜索树有着高效的插入、删除、查询操作。 平均时间的时间复

  • 代码是一个简单的二分搜索程序。我试着追踪程序,但它只会让我更加困惑。我不明白为什么嵌套的if has data,min,midpoint-1,&target和底部的else if语句has data,midpoint+1,max,target。

  • 我被要求对数组进行排序和搜索。数组的排序很简单,我的代码有效,但是每当我尝试调用二叉搜索方法时,它都适用于数组中的第一个元素,但结果给了我“-1” 我的完整代码如下:

  • 一、顺序性 二分搜索树可以当做查找表的一种实现。 我们使用二分搜索树的目的是通过查找 key 马上得到 value。minimum、maximum、successor(后继)、predecessor(前驱)、floor(地板)、ceil(天花板、rank(排名第几的元素)、select(排名第n的元素是谁)这些都是二分搜索树顺序性的表现。 二、局限性 二分搜索树在时间性能上是具有局限性的。 如下图

  • 我需要在数组上使用二进制搜索来找到它们的索引。我能够做到这一点,但是我现在需要使用数组类型为Integer而不是int的对象。 这里有一个问题:“为binarySearch方法提供代码,记住它接收的参数是Object type Object,如果其中任何一个用于调用compareTo方法,则必须首先将其强制转换为可比或原始对象类型。”