简体   繁体   English

Java中String compareTo function的时间复杂度是多少?

[英]What is the time complexity of String compareTo function in Java?

I have a String array String strs[] = {"flower", "flow", "flight"};我有一个字符串数组String strs[] = {"flower", "flow", "flight"}; . .

I want to find the smallest and largest lexicographically string from the array.我想从数组中找到最小和最大的字典字符串。 This is what I did:这就是我所做的:

String first = strs[0], last = strs[0];

for (String str : strs) {
    if (str.compareTo(first) < 0)
        first = str;
    if (str.compareTo(last) > 0)
        last = str;
}

System.out.println("First : " + first + " Last : " + last);

Now I want find the time complexity of this algorithm.现在我想找到这个算法的时间复杂度。 I know it will be n * (time complexity of compareTo() ).我知道它将是 n * ( compareTo()的时间复杂度)。 So, what is the time complexity of this algorithm?那么,这个算法的时间复杂度是多少呢?

public int compareTo(String anotherString) {
    int len1 = value.length;
    int len2 = anotherString.value.length;
    int lim = Math.min(len1, len2);
    char v1[] = value;
    char v2[] = anotherString.value;

    int k = 0;
    while (k < lim) {
        char c1 = v1[k];
        char c2 = v2[k];
        if (c1 != c2) {
            return c1 - c2;
        }
        k++;
    }
    return len1 - len2;
}

This is the implementation of String#compareTo which leads to consider the complexity, in the worst case scenario (len1 = len2 = n), as O(n)这是 String#compareTo 的实现,它导致考虑复杂性,在最坏的情况下 (len1 = len2 = n),作为 O(n)

So the complexity of your algorithm would be O(nm) with n = number of strings in your array and m the max length among those strings lenghts.因此,您的算法的复杂度为 O(nm),其中 n = 数组中的字符串数,m 是这些字符串长度中的最大长度。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM