我为挑战编写了以下解决方案,但不确定其时间复杂度:
def ASCIIConversion(string):
newStr = ''
for chr in string:
if chr.isspace():
newStr = newStr + ' '
else:
newStr += str(ord(chr))
return newStr
由于else语句,程序的复杂度O(logn)吗?
答案 0 :(得分:6)
最坏情况下的时间复杂度计算如下(假设字符串最大长度为n):
newStr = '' # will be done once so 1 time.
for chr in string: # is iterating on the input with max length of n so n times.
if chr.isspace(): # will be checked once it is in the loop so 1 time per each iteration.
newStr = newStr + ' ' # also once per iteration if the if condition is satisfied
else: # will be chehcked once per iteration
newStr += str(ord(chr)) # if else is satisfied
return newStr # will be done 1 time.
我们将假设恒定时间为c,所以:
Time complexity = 1 + n(c*c + c*c) + 1 = 2+Cn => O(n)
答案 1 :(得分:4)
此解决方案仍为O(n)。我不完全确定为什么else语句实际上会影响这一点。您正在对字符串中的每个字符执行一项操作。
即使对于每个字符,您正在执行多个指令(比较等),您可能会认为复杂度类似于O(3n),但您当然会忽略系数。我敢肯定您知道这一点,但是对于以后查看此问题的人,对else语句感到困惑,这可能会有所帮助。
答案 2 :(得分:0)
无论if-else条件如何,都循环遍历字符串的每个字符,因此时间复杂度为O(n)。