Python 这两种解决方案的时间复杂度是多少?
我正在解决这个问题:回文子串。Python 这两种解决方案的时间复杂度是多少?,python,data-structures,time-complexity,Python,Data Structures,Time Complexity,我正在解决这个问题:回文子串。 给定一个字符串,您的任务是计算该字符串中有多少回文子字符串 具有不同开始索引或结束索引的子字符串被计为不同的子字符串,即使它们包含相同的字符 我尝试过多种方法,据我所知,这两种方法的复杂性都是O(N*3)。但是leetcode接受一个解决方案,并超出另一个解决方案的返回时间限制 可接受的解决方案: def countSubstrings(self, s): count = len(s) for i in range(2, len(s
给定一个字符串,您的任务是计算该字符串中有多少回文子字符串 具有不同开始索引或结束索引的子字符串被计为不同的子字符串,即使它们包含相同的字符 我尝试过多种方法,据我所知,这两种方法的复杂性都是O(N*3)。但是leetcode接受一个解决方案,并超出另一个解决方案的返回时间限制 可接受的解决方案:
def countSubstrings(self, s):
count = len(s)
for i in range(2, len(s)+1):
j = 0
while(j < len(s) and j+i <= len(s)):
t = s[j:j+i]
j = j + 1
reverse_t = t[::-1]
if t == reverse_t:
count += 1
return count
def countsubstring(self,s):
计数=len(s)
对于范围(2,len(s)+1)内的i:
j=0
而(j
reverse_t = ''
for k in range(len(t)-1, -1, -1):
reverse_t += t[k]
由于字符串是不可变的,通过一次添加1个字母来构造字符串效率极低,因为在每次迭代中,您必须构造一个全新的对象。本质上,这是您在计算中没有考虑的字符串串联。逐字母构造长度为n的字符串实际上是o(n**2)
为了演示这会带来多大的不同,下面是一个简单的设置:
def letter_by_letter_reverse(string):
reverse_t = ''
for k in range(len(string)-1, -1, -1):
reverse_t += string[k]
return reverse_t
def slice_reverse(string):
reverse_t = string[::-1]
return reverse_t
test = 'some_string' * 500
%timeit letter_by_letter_reverse(test)
#1.44 ms ± 204 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit slice_reverse(test)
#8.2 µs ± 56.6 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
你写道:
reverse_t = ''
for k in range(len(t)-1, -1, -1):
reverse_t += t[k]
由于字符串是不可变的,通过一次添加1个字母来构造字符串效率极低,因为在每次迭代中,您必须构造一个全新的对象。本质上,这是您在计算中没有考虑的字符串串联。逐字母构造长度为n的字符串实际上是o(n**2)
为了演示这会带来多大的不同,下面是一个简单的设置:
def letter_by_letter_reverse(string):
reverse_t = ''
for k in range(len(string)-1, -1, -1):
reverse_t += string[k]
return reverse_t
def slice_reverse(string):
reverse_t = string[::-1]
return reverse_t
test = 'some_string' * 500
%timeit letter_by_letter_reverse(test)
#1.44 ms ± 204 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit slice_reverse(test)
#8.2 µs ± 56.6 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
我认为这项任务不需要任何临时字符串就可以完成。你还可以得到一个更简单、更快的算法。我可以为你编写这个算法,但你不会学到任何东西。而且你的第一个算法甚至不起作用。你正在将找到的回文数添加到输入字符串的长度中。我认为这项任务应该没有任何临时字符串是可能的。你也会得到一个更简单、更快的算法。我可以为你编写这个算法,但你不会学到任何东西。而且你的第一个算法甚至不起作用。你正在将找到的回文数加到输入字符串的长度上。