这个程序的时间复杂度是多少?我们根据任意大的输入计算时间复杂度。在此示例中,输入字符串可能非常大,但如果它没有空格,那么它只是 O(n(。如果字符串有空格,它将是 O(n * numberOfWords(,我可以将其视为 O(n^2( 时间复杂度吗?提前谢谢你!
public static String revEachWord(String str) {
String reversed = "";
String[] words = str.split(" ");
for(String word : words) {
String reversedWord = "";
for(int i = word.length() - 1; i >= 0; i--) {
reversedWord += word.charAt(i);
}
reversed += reversedWord + " ";
}
return reversed.trim();
}
阿列克谢指出这是O(numberOfWords * averageWordLength)
。这是正确的(如果我们暂时忽略+=
(,但更一般的答案是输入的长度,n
.既然n = numberOfWords * averageWordLength
,我们可以说它是O(n)
的,或者说是线性的。
但这并不完全正确。正如chrylis在评论中指出的那样,由于您使用+=
来构建字符串,因此需要更长的时间:每个副本O(n)
,numberOfWords
总副本,O(n * numberOfWords)
总数,或在最坏的情况下O(n^2)
。(实际上,它可能比这更糟糕;我没有考虑嵌套循环中的+=
。伊克斯。最好开始使用StringBuilder
来获得良好的O(n)
运行时间。
O(字数 * 平均字长(