我正在尝试实现自己的算法,以使用列表来反转字符串,例如
alice
到
ecila
import re
string = "alice"
string = re.findall('.',string)
length = len(string)
for x in range(1,int(length/2)+1):
first = string[x-1]
last = string[length-x]
string[x-1]=last
string[length-x]=first
string = "".join(string)
print(string)
在时间复杂度,空间复杂度或两者方面(使用列表或不使用列表都是可以的)上,更有效的方式来反转字符串是什么?
答案 0 :(得分:1)
这里不需要依赖正则表达式,re.findall('.',string)
可以重写为list(string)
。您将需要将int(length/2)+1
替换为length // 2
或len(string) // 2
(您不需要额外的变量),因为前者将失败并使用长度相等的字符串(它将运行一次额外的迭代,撤消上一次迭代的交换。)
交换代码不必要地冗长,因为您可以只使用x, y = y, x
交换两个变量,这意味着您只需执行string[i], string[-i-1] = string[-i-1], string[i]
。
>>> string = list('alice')
>>> for i in range(len(string) // 2):
... string[i], string[-i-1] = string[-i-1], string[i]
...
>>> string
['e', 'c', 'i', 'l', 'a']
其复杂度为O(N / 2)或O(N)。
PS,当您意识到 string[::-1]
用一个简洁的表达方式完成所有这些操作时,所有这些都是没有意义的。
答案 1 :(得分:1)
获取字符串:-
的简单方法s = 'alice'
q = ''.join( list( reversed(s) ) )
print(q)
希望对您有帮助。