反转字符串的算法(不进行字符串切片)

时间:2019-06-29 03:14:57

标签: python string algorithm reverse

我正在尝试实现自己的算法,以使用列表来反转字符串,例如

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)

在时间复杂度,空间复杂度或两者方面(使用列表或不使用列表都是可以的)上,更有效的方式来反转字符串是什么?

2 个答案:

答案 0 :(得分:1)

这里不需要依赖正则表达式,re.findall('.',string)可以重写为list(string)。您将需要将int(length/2)+1替换为length // 2len(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)

希望对您有帮助。