问题描述:
小明同学需要对一个长度为 N 的字符串进行处理,他需要按照要求执行若干步骤,每个步骤都均为下面 2 种操作中的一种,2 种操作如下:
TYPE 1. 从字符串结尾开始算起,将第 X 个字符之前的字符移动到字符串末尾
TYPE 2. 输出字符串索引为 X 的字符
小明尝试了很久没能完成,你可以帮他解决这个问题吗?
输入描述
第一行,包含两个整数,字符串的长度 N 和操作次数T;
第二行为要操作的原始字符串;
之后每行都是要执行的操作类型 TYPE 和操作中 X 的值,均为整数。
输入范围:
字符串长度 N:1 <= N <= 10000
操作次数 T:1 <= T <= 10000
操作类型 TYPE:1 <= TYPE<= 2
变量 X:0 <= X < N
输出描述
操作的执行结果
分析:主要是在字符串进行旋转时,更新字符串的开始位置,当更新后,进行查找时,就可能不是从索引为0的位置开始查找了,而是在其他的某一个位置
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s;
s = br.readLine();
String[] sArray = s.split(" ");
int n = Integer.valueOf(sArray[0]);
int t = Integer.valueOf(sArray[1]);
s = br.readLine();
String input;
int i = 0;
int type;
int x;
int start = 0;
while(i < t) {
input = br.readLine();
sArray = input.split(" ");
type = Integer.valueOf(sArray[0]);
x = Integer.valueOf(sArray[1]);
if(type == 1) {
start = (start - x + n) % n;
}else {
System.out.println(s.charAt((start + x) % n));
}
i++;
}
}
}