字符串反转是面试中常考的题型之一,下面用python进行了一下总结。
string = 'abcdef'
def string_reverse0(string):
l = list(string)
l.reverse()
return ''.join(l)
def string_reverse1(string):
return string[::-1]
def string_reverse2(string):
t = list(string)
l = len(t)
for i, j in zip(range(l - 1, 0, -1), range(l // 2)):
t[i], t[j] = t[j], t[i]
return "".join(t)
def string_reverse3(string):
if len(string) <= 1:
return string
return string_reverse3(string[1:]) + string[0]
from collections import deque
def string_reverse4(string):
d = deque()
d.extendleft(string)
return ''.join(d)
def string_reverse5(string):
return ''.join(string[i] for i in range(len(string) - 1, -1, -1))
import time
TIMES = 100000
def test(f, s,name):
st = time.time()
i = 0
while (i<TIMES):
f(s)
i = i+1
print(f(s),' %s %ss'%(name, time.time()-st))
test(string_reverse0,string,"test(string_reverse0)")
test(string_reverse1,string,"test(string_reverse1)")
test(string_reverse2,string,"test(string_reverse2)")
test(string_reverse3,string,"test(string_reverse3)")
test(string_reverse4,string,"test(string_reverse4)")
test(string_reverse5,string,"test(string_reverse5)")
输出结果:
fedcba test(string_reverse0) 0.09120917320251465s
fedcba test(string_reverse1) 0.03125333786010742s
fedcba test(string_reverse2) 0.2656519412994385s
fedcba test(string_reverse3) 0.32213616371154785s
fedcba test(string_reverse4) 0.1020510196685791s
fedcba test(string_reverse5) 0.24791359901428223s