【问题标题】:How to find space complexity for anagram question如何找到字谜问题的空间复杂度
【发布时间】:2022-08-12 00:14:33
【问题描述】:

我在我的程序中使用了两个 26 元素数组。
这个程序找出一个字符串是否是另一个字谜的时间和空间复杂度是多少?

int arr1[26] = { 0 };
int arr2[26] = { 0 };

for (char& x : s)
arr1[x - \'a\']++;

for (char& x : t)
arr2[x - \'a\']++;

for (int i = 0; i < 26; i++) {
    if (arr1[i] != arr2[i])
        return false;
}
return true;
  • 什么是s,什么是t,如果要计算变量n 的大O 表示法,那么n 是什么?是s 的大小,t 的大小,还是就数组大小而言?
  • @Samyukta 欢迎来到 StackOverflow。如果某个答案解决了您的问题,您可以单击 \'✔\' 将其标记为可接受的答案。有了足够的代表,您还可以投票任何有用的答案(请参阅此处:stackoverflow.com/help/someone-answers)。

标签: c++ arrays time-complexity space-complexity anagram


【解决方案1】:

在下面的答案中,我假设n 是输入的总长度,即s.length() + t.length()

空间复杂度:
您需要 2 个 26 个元素的数组(在本例中为 ints)。
因为这是一个常数不是取决于输入大小,空间复杂度为 O(1).

这当然是除了存储输入本身所需的空间之外(O(n) 假设它都在内存中)。

时间复杂度:
前 2 个循环将遍历输入一次。对于每个元素,您执行恒定数量的操作(递增数组中的计数器)。因此,他们的时间将是 O(n)。
最后一个循环有一个恒定的时间不是取决于输入大小(26 次迭代)。因此它是 O(1)。
一起时间复杂度为 O(n).

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 2020-07-07
    • 2015-11-17
    相关资源
    最近更新 更多