Pruebe el algoritmo de preguntas para mejorar el funcionamiento de la cadena (versión detallada de Pyhton)

Ponga los requisitos de la pregunta primero y explíquelos a través de los procedimientos uno por uno, para que pueda comprender completamente mis pensamientos y espero poder ayudarlo.


autor: Xiao Huang
Crecimiento lento y firme


资源限制
时间限制:1.0s   内存限制:256.0MB
问题描述
  给出一个字符串S,然后给出q条指令,分别有4种:

  1. Append str
  表示在S的最后追加一个字符串str。
  例:
  原字符串:ABCDE
  执行 Append FGHIJ 后
  字符串变为:ABCDEFGHIJ

  2. Insert x str
  表示在位置x处插入一个字符串str。(输入保证0<x<=当前字符串长度)
  例:
  原字符串:ABCGHIJ
  执行 Insert 4 DEF 后
  字符串变为:ABCDEFGHIJ

  3. Swap a b c d
  表示交换从第a位到第b位的字符串与从第c位到第d位的字符串。(输入保证0<a<b<c<d<=当前字符串长度)
  例:
  原字符串:ABGHIFCDEJ
  执行 Swap 3 5 7 9后
  字符串变为:ABCDEFGHIJ

  4. Reverse a b
  表示将从第a位到第b位的字符串反转。(输入保证0<a<b<=当前字符串长度)
  例:
  原字符串:ABGFEDCHIJ
  执行 Reverse 3 7 后
  字符串变为:ABCDEFGHIJ

  最后输出按顺序执行完指令后的字符串。
输入格式
  输入第一行包含字符串S,第二行包含一个整数q,接下来q行分别为q个指令。
输出格式
  输出为1行,为按顺序执行完输入指令后的字符串。
样例输入
My
5
Append Hello
Insert 3 dlroW
Reverse 3 7
Swap 3 7 8 12
Swap 1 2 3 7
样例输出
HelloMyWorld
样例说明
  原字符串:My
  执行 Append Hello 后:MyHello
  执行 Insert 3 dlroW 后:MydlroWHello
  执行 Reverse 3 7 后:MyWorldHello
  执行 Swap 3 7 8 12 后:MyHelloWorld
  执行 Swap 1 2 3 7 后:HelloMyWorld
数据规模和约定
  对于30%的数据,q=1;

  对于70%的数据,如有Swap指令,Swap指令中b-a=d-c;

  对于100%的数据,最终字符串长度不大于400001<=q<=150

Función principal:
S es la cadena de entrada, y la convierto en una lista aquí porque la propia función de la lista se usa en la función Append () y la función Insert (). Por supuesto, no es necesario convertirlo en una lista, solo modificar la operación correspondiente.
'' .jion (S) significa convertir sin problemas la lista en una cadena de caracteres.
Ejemplo: '' .jion (['1', '2', '3', '4', '5', '6']) se convertirá en 123456
n es la q en el título

if __name__ == "__main__":
        S = list(input())
        n = int(input())
        if 1<=n<=150:
                while n > 0:
                        nums = input()
                        S = fun(S,nums)
                        n -= 1
        print(''.join(S))

Acerca de la función Append:
agregue s después de la S original, aquí está la función append () usando la lista, y agregue los elementos en s one después de la S, donde la complejidad temporal de append () es O (1).

def Append(S,s):
        for i in s:
                S.append(i)

Acerca de la función Insertar ():
inserte s en la posición x de la cadena original S e inserte utilizando la función insertar () de la lista.

def Insert(S,x,s):
        for i in range(len(s)):
                S.insert(x-1+i,s[i])

Con respecto a la función Swap (): se
considera aquí que las diferentes posiciones de d tendrán diferentes efectos en la operación de corte de la lista, por lo que se divide en dos casos de d = ny d <n.

def Swap(S,a,b,c,d):
        n = len(S)
        if n > d:
                n1 = S[0:a-1]
                n2 = S[a-1:b]
                n3 = S[b:c-1]
                n4 = S[c-1:d]
                n5 = S[d:]
                S = n1+n4+n3+n2+n5
        elif n == d:
                n1 = S[0:a-1] 
                n2 = S[a-1:b]
                n3 = S[b:c-1]
                n4 = S[c-1:]
                S =  n1+n4+n3+n2
        return S

Función inversa ():
aquí debemos considerar el tamaño de dos valores a y b, discutir el impacto del valor de b en esta función en el caso de a = 1 y a ≠ 1, respectivamente. Por ejemplo, cuando a = 1, b = n, simplemente voltee esta función.

def Reverse(S,a,b):
        n = len(S)
        if a > 1:
                if b < n:
                        n1 = S[:a-1]
                        n2 = S[a-1:b]
                        n3 = S[b:]
                        S = n1 + n2[::-1] +n3
                elif b == n:
                        n1 = S[:a-1]
                        n2 = S[a-1:]
                        S = n1 + n2[::-1]
        else:
                if b < n:
                        n1 = S[:b]
                        n2 = S[b:]
                        s = n1[::-1] + n2
                else:
                        S = S[::-1]
        return S

Con respecto a la función fun ():
en esta función, se juzga el valor de cada entrada y se realiza la operación correspondiente.

def fun(S,nums):
        a = nums.split()
        if a[0] == 'Append':
                Append(S,a[1])
        elif a[0] == 'Insert':
                Insert(S,int(a[1]),a[2])
        elif a[0] == "Swap":
                S = Swap(S,int(a[1]),int(a[2]),int(a[3]),int(a[4]))
        elif a[0] == "Reverse":
                S = Reverse(S,int(a[1]),int(a[2]))
        return S

Finalmente, adjunte el código detallado:

def Append(S,s):
        for i in s:
                S.append(i)

def Insert(S,x,s):
        for i in range(len(s)):
                S.insert(x-1+i,s[i])

def Swap(S,a,b,c,d):
        n = len(S)
        if n > d:
                n1 = S[0:a-1]
                n2 = S[a-1:b]
                n3 = S[b:c-1]
                n4 = S[c-1:d]
                n5 = S[d:]
                S = n1+n4+n3+n2+n5
        elif n == d:
                n1 = S[0:a-1] 
                n2 = S[a-1:b]
                n3 = S[b:c-1]
                n4 = S[c-1:]
                S =  n1+n4+n3+n2
        return S

def Reverse(S,a,b):
        n = len(S)
        if a > 1:
                if b < n:
                        n1 = S[:a-1]
                        n2 = S[a-1:b]
                        n3 = S[b:]
                        S = n1 + n2[::-1] +n3
                elif b == n:
                        n1 = S[:a-1]
                        n2 = S[a-1:]
                        S = n1 + n2[::-1]
        else:
                if b < n:
                        n1 = S[:b]
                        n2 = S[b:]
                        s = n1[::-1] + n2
                else:
                        S = S[::-1]
        return S

def fun(S,nums):
        a = nums.split()
        if a[0] == 'Append':
                Append(S,a[1])
        elif a[0] == 'Insert':
                Insert(S,int(a[1]),a[2])
        elif a[0] == "Swap":
                S = Swap(S,int(a[1]),int(a[2]),int(a[3]),int(a[4]))
        elif a[0] == "Reverse":
                S = Reverse(S,int(a[1]),int(a[2]))
        return S

if __name__ == "__main__":
        S = list(input())
        n = int(input())
        if 1<=n<=150:
                while n > 0:
                        nums = input()
                        S = fun(S,nums)
                        n -= 1
        print(''.join(S))
82 artículos originales publicados · Me gusta 11 · Visitas 10,000+

Supongo que te gusta

Origin blog.csdn.net/Python_Matlab/article/details/105643247
Recomendado
Clasificación