【问题标题】:Method for finding the lexicographic number of a string查找字符串字典序号的方法
【发布时间】:2018-05-29 03:26:46
【问题描述】:

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

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

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

【问题讨论】:

    标签: java arrays string methods lexicographic


    【解决方案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 专家 =)

    【讨论】:

      【解决方案2】:

      事实上,您不必寻找字符串的“词典编号”,因为它们是我们所说的词典本身的起源。基本上比较字符串是在从左边开始的相同位置逐个字母完成的,例如ab&gt;aa,因为两者的第一个字符相同,但第二个字符b&gt;a

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-07-28
        • 2012-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-02
        • 1970-01-01
        相关资源
        最近更新 更多