我需要对时间复杂度有更好的了解,这个特定示例似乎使我感到困惑。
问题:(来源LeetCode) 给定一个字符串,找到其中的第一个非重复字符并返回其索引。如果不存在,则返回-1。
示例:
alert($('#TEST').find('li[class^='sort']').html());
注意:您可以假定该字符串仅包含小写字母。
根据我的解决方案,我知道for循环将遍历字符串,最糟糕的情况是O(n)时间,n是字符串的长度。但是在for循环中,我会检查每个字符的计数,并且我知道count()方法本身需要O(n)时间。因此,使其成为O(n ^ 2)解决方案?我的逻辑正确吗?
s = "leetcode"
return 0.
s = "loveleetcode",
return 2.
因此,我的代码适用于较小的测试用例,但是在测试s是巨大字符串的情况时,它表示已超过时间限制。我不需要解决问题的方法,而是只想知道O(n ^ 2)是否是我代码的实际时间复杂度。
答案 0 :(得分:3)
是的,这是正确的。 for ... len(s)
的复杂度为O(|s|)
,s.count
也是如此。由于您嵌套了它们,所以您有了O(|s|^2)