这段代码来自Cracking the Coding interview book。
public static boolean isUniqueChars2(String str) {
boolean[] char_set = new boolean[256];
for (int i = 0; i < str.length(); i++) {
int val = str.charAt(i);
if (char_set[val]) return false;
char_set[val] = true;
}
return true;
}
作者提到,
时间复杂度是O(n),其中n是字符串的长度,空间复杂度是O(n)。
我理解时间复杂度是 O(n) 但我不明白空间复杂度怎么可能是 O(n)
我的想法:无论输入(str)大小是多少,char_set 都将保持一个大小为 256 的数组。即使“str”的长度是 100,000,char_set 仍然是一个 256 元素的数组。所以我想,由于这个函数的内存需求不会随着输入的大小而改变并且保持一个常数256,所以空间复杂度是常数,即O(1)。
有人可以解释一下,如果我错了(为什么?)
太感谢了。