NC231683. 两极反转
描述
输入描述
第一行两个整数 表示初始字符串长度,操作数。
第二行一个字符串,表示初始字符串
下面 行每行包含3个整数或字符串,表示一个操作,具体如下:
1. 1 l r
2. 2 p str
3. 3 l r
保证操作合法。,字符为小写英文字母。
字符串从下标1开始, , 为当前串,
输出描述
对于每个操作 ,输出一行字符串
示例1
输入:
5 5 abcde 1 2 3 3 1 3 2 2 lzqnl 2 3 wzjbn 3 1 10
输出:
acb aclwzjbnzq
C++ 解法, 执行用时: 17ms, 内存消耗: 3592K, 提交时间: 2022-01-18 16:05:55
#include"bits/stdc++.h" using namespace std; int main(){ int n,m,num,l,r,p; string s,str; cin>>n>>m>>s; for(int i = 0;i < m;i ++ ){ cin>>num; if(num == 1) cin>>l>>r,reverse(s.begin() + l - 1,s.begin() + r); else if(num == 2) cin>>p>>str,s = s.substr(0,p) + str + s.substr(p); else if(num == 3) cin>>l>>r,cout<<s.substr(l - 1,r - l + 1)<<endl; } }
Python3 解法, 执行用时: 79ms, 内存消耗: 7828K, 提交时间: 2021-12-21 18:06:12
n,m = map(eval,input().split()) s = input() for i in range(m): x,y,z = input().split() if x == '1': y,z = int(y),int(z) s = s[:y - 1] + s[y - 1:z][::-1] + s[z:] elif x == '2': y = int(y) sy,ys = s[:y],s[y:] s = sy + z + ys else: y,z = int(y),int(z) print(s[y - 1:z])