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%的数据,最终字符串长度不大于40000,1<=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))