正如标题所说的,我需要帮助来减少我编写的代码的执行时间,因为我正在编译它的在线法官给了我一个超过时间限制的错误,即使代码似乎可以工作,并在我编译时给出了正确的答案。在
问题是:
比较一个字符串列表并找出不同字符串的数量,其中两个字符串如果完全相同,或者相同但相反,则被视为“相同”(不不同)。字符串只包含字母a-z,都是小写字母,最多有10个字符。提供的每一组最多有5000个字符串。在
例如,字符串“abc”与“cba”以及“abc”相同。“cba”与“abc”以及“cba”相同。“abc”、“cba”、“bac”]列表中有两个不同的字符串。在
编写一个函数answer(x),它接受字符串列表x,并使用相同的定义返回不同字符串的数目。在
我的代码:
def answer(x):
b=0
ph=[]
rand=0
for y in x:
comp=list(y)
ph.append(comp)
while b<len(ph)-1:
j=b+1
while j<len(ph):
if(len(ph[b])==len(ph[j])):
i=0
while(i<len(ph[b])):
if ph[b][i]==ph[j][i]:
rand+=1
elif ph[b][i]==ph[j][len(ph[b])-1-i]:
rand+=1
i+=1
if rand==len(ph[b]):
ph.pop(j)
rand=0
j+=1
b+=1
return len(ph)
这可以用最少的时间直接用
set()
函数完成,但它只删除完全相同的字符串。因此,为了删除反向的字符串,需要一个循环,但是在使用set()
过滤出相似的字符串(不是反向的)之前,这将大大减少循环迭代次数。在不需要进行串行字符比较来检查字符串标识。在
字符串在Python中是不可变的。只要把字符串和它的反面放在字典里,然后总是对照字典检查。在
相关问题 更多 >
编程相关推荐