Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python leetcode387的时间复杂度_Python_Python 3.x - Fatal编程技术网

Python leetcode387的时间复杂度

Python leetcode387的时间复杂度,python,python-3.x,Python,Python 3.x,我需要更好地理解时间复杂性,这个特殊的例子似乎让我困惑 问题:(源代码) 给定一个字符串,找到其中的第一个非重复字符并返回其索引。如果它不存在,则返回-1 示例: s = "leetcode" return 0. s = "loveleetcode", return 2. 注意:您可以假设字符串只包含小写字母 根据我的解决方案,我知道for循环将遍历字符串最坏情况O(n)时间,n是字符串的长度。但是在for循环中,我检查每个字符的计数,我知道count

我需要更好地理解时间复杂性,这个特殊的例子似乎让我困惑

问题:(源代码) 给定一个字符串,找到其中的第一个非重复字符并返回其索引。如果它不存在,则返回-1

示例:

s = "leetcode"
return 0.

s = "loveleetcode",
return 2.
注意:您可以假设字符串只包含小写字母

根据我的解决方案,我知道for循环将遍历字符串最坏情况O(n)时间,n是字符串的长度。但是在for循环中,我检查每个字符的计数,我知道count()方法本身需要O(n)个时间。那么把它变成一个O(n^2)解?我的逻辑正确吗

我的解决方案:
类解决方案:
def firstUniqChar(自我,s:str)->int:
如果len=0:
返回-1
对于范围(len)中的字符:
如果s.count(s[char])>1:
通过
其他:
返回(字符)
返回(-1)

因此,我的代码适用于较小的测试用例,但是当测试s是一个巨大字符串的用例时,它表示超出了时间限制。我不需要解决这个问题,我只想知道O(n^2)是否是我的代码的实际时间复杂度。

是的,这是正确的。对…的
的复杂性。。。len(s)
O(| s |)
s.count也是
。既然嵌套了它们,那么就有了
O(| s | ^2)

您的假设是正确的。实际上,您有两个嵌套循环,在最坏的情况下,每个循环计数为
n
,因此
n^2
。如果
len(set(s))==0
,则
len(s)==0
。此外,您的实现是O(n^2),但不一定是。如果您愿意使用O(n)额外的空间,您可以在O(n)时间内完成此操作。@chepner您甚至不需要
O(n)
space。你只需要记住前一个字符。额外需要的空间只有O(26):-),一个保存每个字母状态的列表。例如,“abba cd dice”的最终状态可以是
[-1,-1,-1,11,0,0,0,9,…]
@Selcuk,仍然是O(N)空格,因为您可能只在字符串的末尾找到一个非重复的