如何优化与字符串反转相关的函数?

2024-09-28 01:26:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一根弦:“弦” 你要做的第一件事就是反转它:“gnits” 然后从第一个位置取下字符串并再次反转:“gStrin” 然后从第二个位置取下字符串并再次反转:“gSnirt” 然后从第三个位置取下字符串并再次反转:“gSntri” 继续此模式,直到完成每个位置,然后返回已创建的字符串。对于这个特定的字符串,您将返回:“gSntir”

我必须重复整个过程x次,其中字符串和x可能非常大。(百万或十亿)

我的代码对于小字符串工作得很好,但是对于很长的字符串,它会给出超时错误。你知道吗

def string_func(s,x):
    def reversal(st):
        n1=len(st)
        for i in range(0,n1):
            st=st[0:i]+st[i:n1][::-1]
        return st
    for i in range(0,x):
        s=reversal(s)
    return s

Tags: 字符串inforreturndef模式rangest
3条回答

这种线性实现可以为您指明正确的方向:

from collections import deque
from itertools import cycle

def special_reverse(s):
    d, res = deque(s), []
    ops = cycle((d.pop, d.popleft))
    while d:
        res.append(next(ops)())
    return ''.join(res)

您可以在以下示例中识别切片模式:

>>> special_reverse('123456')
'615243'
>>> special_reverse('1234567')
'7162534'

这同样有效:

my_string = "String"
my_string_len = len(my_string)

result = ""

for i in range(my_string_len):
    my_string = my_string[::-1]
    result += my_string[0]
    my_string = my_string[1:]

print(result)

这个,虽然看起来像意大利面:D

s = "String"
lenn = len(s)
resultStringList = []

first_half = list(s[0:int(len(s) / 2)])
second_half = None
middle = None

if lenn % 2 == 0:
    second_half = list(s[int(len(s) / 2) : len(s)][::-1])
else:
    second_half = list(s[int(len(s) / 2) + 1 : len(s)][::-1])
    middle = s[int(len(s) / 2)]
    lenn -= 1

for k in range(int(lenn / 2)):
    print(k)
    resultStringList.append(second_half.pop(0))
    resultStringList.append(first_half.pop(0))

if middle != None:
    resultStringList.append(middle)

print(''.join(resultStringList))

根据原始字符串的模式和结果,我构造了这个算法。它的操作数最少。你知道吗

str = 'Strings'
lens = len(str)
lensh = int(lens/2)
nstr = ''
for i in range(lensh):
    nstr = nstr + str[lens - i - 1] + str[i]

if ((lens % 2) == 1):
    nstr = nstr + str[lensh]

print(nstr)

相关问题 更多 >

    热门问题