0
点赞
收藏
分享

微信扫一扫

算法提高 字符串的操作 java 题解 356

问题描述

  给出一个字符串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
  执行 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);
	}
}

提交截图:

 

举报

相关推荐

0 条评论