查找字符串的词典编号的方法

时间:2017-12-14 23:11:35

标签: java arrays string methods lexicographic

我正在尝试为我的Java课做作业。赋值是创建一个方法,通过字符串数组运行二进制搜索,并返回位置。老师告诉我们假设数组的元素是按升序排列的。这意味着每个单词的词典编号在阵列末尾增加。为了测试它是否有效,我使用了:

String[] names = {"H", "He", "Hel", "Hell",
"Hello", "Hello ", "Hello S", "Hello Si",
"Hello Sir", "Hello Sir."};

`我需要找出词典的词典编号。有没有我可以使用的预制方法,或者我必须自己制作一个方法来为我计算它?如果事实证明我必须自己做,我会把它放在这个文本的下面,供其他人使用。

2 个答案:

答案 0 :(得分:1)

如果按lexicographic number is of a string你的意思是按字典顺序排列所有排列 - 例如,“abc”的排名是1,“acb”的排名是2,“cba”的排名是6,你可以使用以下代码:

static int fact(int n){
    return (n <= 1) ? 1 : n * fact(n - 1);
}

static int findSmallerInRight(String str, int low, int high){
    int countRight = 0, i;

    for (i = low + 1; i <= high; ++i)
        if (str.charAt(i) < str.charAt(low)) ++countRight;
    return countRight;
}

static int findRank (String str){
    int len = str.length();
    int mul = fact(len);
    int rank = 1;
    int countRight;

    for (int i = 0; i < len; ++i){
        mul /= len - i;
        countRight = findSmallerInRight(str, i, len-1);
        rank += countRight * mul;
    }
}

//findRank('Hello Sir.');

据我所知,没有任何原生方法可以做到这一点,虽然我可能是错的。

我确信这可以大大改进,我绝不是Java专家=)

答案 1 :(得分:0)

事实上,您不必查找&#39;词典编号&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;一个字符串,因为它们是我们称之为词典编纂本身的起源。基本上比较字符串是由lettre在左边开始的同一位置完成的,例如ab>aa,因为两个中的第一个字符相同,但在第二个b>a