首页 > 试题广场 >

字符串挪移

[编程题]字符串挪移
  • 热度指数:261 时间限制: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.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static char[] ret;
    public static int cur;
    public static void dfs(char[] strArray,boolean flag){
        if(strArray.length==1){
            ret[cur++]=strArray[0];
            return;
        }
        int n=strArray.length;
        char[] nextArray;
        if(flag){
            nextArray=new char[(n+1)/2];
        }else{
            nextArray=new char[(n)/2];
        }
        int p=0;
        boolean newFlag=false;
        //flag通过本次是否最后一个元素加入ret来判断
        if(flag){
            for(int i=0;i<n;i++){
                if(i%2==0){
                    nextArray[p++]=strArray[i];
                    if(i==n-1){
                        newFlag=false;
                    }
                }else{
                    ret[cur++]=strArray[i];
                    if(i==n-1){
                        newFlag=true;
                    }
                }
            }
        }else{
            for(int i=0;i<n;i++){
                if(i%2==1){
                    nextArray[p++]=strArray[i];
                    if(i==n-1){
                        newFlag=false;
                    }
                }else{
                    ret[cur++]=strArray[i];
                    if(i==n-1){
                        newFlag=true;
                    }
                }
            }
        }
        dfs(nextArray,newFlag);
    }
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str=in.nextLine();
        int n=str.length();
        ret=new char[n];
        int cur=0;
        char[] strArray=str.toCharArray();
        dfs(strArray,true);
        System.out.println(new String(ret));
    }
}

发表于 2025-10-18 22:28:40 回复(0)