首页 > 试题广场 >

字符串挪移

[编程题]字符串挪移
  • 热度指数:342 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
~~~~~~长度为  只包含小写字母的字符串 ,下标  开始。进行  次操作,第  次操作将  移动到字符串末尾。输出  次操作后的字符串。
~~~~~~例如字符串 \texttt { ,第一步 \texttt { ,第二步 \texttt{ ,第三步 \texttt{ ,第四步 \texttt{ ,第五步 \texttt{ 。

输入描述:
~~~~~~在一行上输入一个由小写字母构成的字符串,长度记为 n\ (1 \le n \le 10^6) 


输出描述:
~~~~~~在一行上输出一个字符串,表示操作后的字符串。
示例1

输入

paectc

输出

accept

说明

第一步 ,第二步 ,第三步 ,第四步 ,第五步 ,第六步 
示例2

输入

abqde

输出

bdaeq

备注:


import java.util.Scanner;

import java.io.*;


// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static String[] lineP;
    public static String line;
    public static int n;
    public static void main(String[] args)throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        PrintWriter out = new PrintWriter(System.out);

        while ((line = br.readLine()) != null) {
            n = line.length();
            out.println(moveChar(line, n));
        }
        out.flush();
        out.close();
    }
    //模拟移动过程即可
    public static String moveChar(String str, int n) {
        char[] arr = new char[n + n];
        int i = 0;
        for (char c : str.toCharArray()) {
            arr[i] = c;
            i++;
        }
        for (int j = 0, cur = 0; j < n && cur < 2 * n;) {
            if (j == i - n) {
                char c = arr[cur];
                //全为小写字母,选择一个大写字母占位
                arr[cur++] = 'A';
                arr[i++] = c;
                //重定向当前位置,把位置赋值给 j 
                j = cur + n -i;
            }
            else if (arr[cur] != 'A' ) {
                j++;cur++;
            } else {
                cur++;
            }
        }
        i = 0;
        for (int k = 0; k < arr.length; k ++) {
            if (arr[k] != 'A')arr[i++] = arr[k];
        }
        String ans = new String(arr);
        return ans.substring(0, i);
    }
}
发表于 2025-11-23 14:50:28 回复(0)