列表

详情


NC231683. 两极反转

描述

你有一个字符串,有三种操作

1. l, r 反转[l,r]区间的字符
2. p, str 在第p个字符后插入字符串str
3. l r 询问当前字符串子串s[l,r]是什么

提示:反转"abcde"中的[2,4],结果为"adcbe"。

输入描述

第一行两个整数 n,m 表示初始字符串长度,操作数。

第二行一个字符串,表示初始字符串

下面 m 行每行包含3个整数或字符串,表示一个操作,具体如下:
1. 1 l r
2. 2 p str
3. 3 l r

保证操作合法。,字符为小写英文字母。
字符串从下标1开始, s 为当前串,

输出描述

对于每个操作 3 ,输出一行字符串

示例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])


















上一题