我正在尝试为我的Java课做作业。赋值是创建一个方法,通过字符串数组运行二进制搜索,并返回位置。老师告诉我们假设数组的元素是按升序排列的。这意味着每个单词的词典编号在阵列末尾增加。为了测试它是否有效,我使用了:
String[] names = {"H", "He", "Hel", "Hell",
"Hello", "Hello ", "Hello S", "Hello Si",
"Hello Sir", "Hello Sir."};
`我需要找出词典的词典编号。有没有我可以使用的预制方法,或者我必须自己制作一个方法来为我计算它?如果事实证明我必须自己做,我会把它放在这个文本的下面,供其他人使用。
答案 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