简体   繁体   中英

String time complexity

public String joinWords(String[] words)
{ 
     String sentence = "";
     for (String w : words)
     {
        sentence = sentence + w;  
     }
     return sentence;
}

Assume that the strings are all the same length (call this x) and that there are n strings. On each concatenation,a new copy of the string is created, and the two strings are copied over,character by character. The 1st iteration requires us to copy x characters. The second iteration requires copying 2x characters. The third iteration requires 3x ,and so on. The total time therefore is O(x + 2x + . . . + nx). This reduces to O(xn^2).

1) I can't understand from the book answer how they get 3x characters in the third iteration , 4x in the 4th iteration . String is immutable and in each sentence variable assignment new String object is created . And then is should copy the previous value of the string char by char and the value of w . And i get 2x characters again . Thank you all !

In the 1st iteration sentence has 0 characters and w has x characters, so you have to copy x characters.

In the 2nd iteration sentence has x characters and w has x characters, so you have to copy 2*x characters.

In the 3rd iteration sentence has 2*x characters and w has x characters, so you have to copy 3*x characters.

In the 4th iteration sentence has 3*x characters and w has x characters, so you have to copy 4*x characters.

And so on...

String itself is immutable but reference is not.

Assume next example:

String s = "1";
s = s + "2";

s will contains value "12" , but string "1" will not changes. We can check it in next example:

String s = "1";
String sBak = s;
s = s + "2";

s equal to "12" again. And we can check sBak to ensure that "1" did not changes.

Now back to your sample. Assume that words = {"first, "second", "third"} .

Statement sentence = sentence + w; updates sentence variable. After first iteration it will be "" + "first" wich is "first" . After second iteration it will be equal to "first" + "second" and so on.

So length of string referenced by sentence will increase each time (each time sentence will point to different string).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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