字符串时间复杂度
本文关键字:时间复杂度 字符串 | 更新日期: 2023-09-27 18:04:26
public String joinWords(String[] words)
{
String sentence = "";
for (String w : words)
{
sentence = sentence + w;
}
return sentence;
}
假设所有字符串的长度都相同(称之为x),并且有n个字符串。在每次连接时,都会创建字符串的新副本,并逐个字符地复制两个字符串。第一次迭代需要我们复制x个字符。第二次迭代需要复制2x个字符。第三次迭代需要3x,以此类推。因此总时间是O(x + 2x +…)+ nx)。这就得到了O(xn^2)
1)我不能从书的答案中理解他们如何在第三次迭代中获得3个字符,在第4次迭代中获得4个字符。字符串是不可变的,并且在每个句子变量赋值中都会创建新的字符串对象。然后它应该一个字符一个字符地复制前一个字符串的值和w的值。我又得到了2x个字符。谢谢大家!
在第一次迭代中,sentence
有0个字符,w
有x个字符,所以你必须复制x个字符。
在第二次迭代中,sentence
有x个字符,w
有x个字符,所以你必须复制2*x个字符。
在第三次迭代中,sentence
有2*x个字符,w
有x个字符,所以你必须复制3*x个字符。
在第4次迭代中,sentence
有3*x个字符,w
有x个字符,所以你必须复制4*x个字符。
String
本身是不可变的,但引用不是。
假设下一个示例:
String s = "1";
s = s + "2";
s
将包含值"12"
,但字符串"1"
不会改变。我们可以在下一个例子中检查它:
String s = "1";
String sBak = s;
s = s + "2";
s
= "12"
。我们可以检查sBak
,以确保"1"
没有变化。
现在回到你的样品。假设words = {"first, "second", "third"}
.
语句sentence = sentence + w;
更新sentence
变量。在第一次迭代后,它将是"" + "first"
,即"first"
。在第二次迭代后,它将等于"first" + "second"
,以此类推。
所以sentence
每次引用的字符串长度都会增加(每次sentence
指向不同的字符串)