问题描述
给出一个字符串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
解题思路:
字符串的常规操作,尽量将各种操作封装成方法,使代码风格清晰。
java代码:
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int n = Integer.parseInt(br.readLine());
String[]s = new String[n];
for(int i = 0; i < n; i++) {
s[i] = br.readLine();
}
StingHandle obj = new StingHandle(str, s);
obj.handle();
System.out.println(obj.ans);
}
}
class StingHandle{
String []s;
StringBuilder ans = new StringBuilder();
public StingHandle(String str, String[] s) {
this.s = s;
ans = new StringBuilder(str);
}
public void handle() {
for(int i = 0; i < s.length; i++) {
char c = s[i].charAt(0);
if(c == 'A') {
append(s[i].substring(7));
}else if(c == 'I') {
String[] split = s[i].split(" ");
insert(Integer.parseInt(split[1]), split[2]);
}else if(c == 'R') {
String[] split = s[i].split(" ");
reverse(Integer.parseInt(split[1]), Integer.parseInt(split[2]));
}else {
String[] split = s[i].split(" ");
int a = Integer.parseInt(split[1]);
int b = Integer.parseInt(split[2]);
int cc = Integer.parseInt(split[3]);
int d = Integer.parseInt(split[4]);
swap(a, b, cc, d);
}
}
}
public void append(String des) {
ans.append(des);
}
public void insert(int a, String des) {
a = a - 1;
ans.insert(a, des);
}
public void reverse(int a, int b) {
a = a - 1;
String s1 = ans.substring(a, b);
String s3 = ans.substring(b, ans.length());
StringBuilder ans2 = new StringBuilder(s1);
ans2.reverse();
ans.delete(a, ans.length());
ans.append(ans2);
ans.append(s3);
}
public void swap(int a, int b, int c, int d) {
a -= 1;
c -= 1;
String s1 = ans.substring(a, b);
String s2 = ans.substring(b, c);
String s3 = ans.substring(c, d);
String s4 = ans.substring(d, ans.length());
ans.delete(a, ans.length());
ans.append(s3);
ans.append(s2);
ans.append(s1);
ans.append(s4);
}
}
提交截图: