首页 > 试题广场 >

字符串挪移

[编程题]字符串挪移
  • 热度指数: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

备注:



const
rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
    let input, result=[];
    while ((line = await readline())) {
        input = line.split("");
    }
    function slove(b) {
        if(b.length==1){
            result.push(b[0])
            return
        }
        
        //模拟每次处理字符串时把偶索引与奇索引位置提出
        //如果处理的字符串是偶索引正常加入结果
        //如果处理的字符串是奇数把奇索引第一位放入结果 并且去除奇索引的第一位
        if(b.length%2==0){
            result = [...result,...b.filter((item,index)=>index%2!=0)]
            slove(b.filter((item,index)=>index%2==0))
        }else{
            let test = b.filter((item,index)=>index%2==0)
            result = [...result,...b.filter((item,index)=>index%2!=0),test[0]]
            slove(test.slice(1))
        }
    }
    slove(input);
    console.log(result.join(''));
})();

发表于 2025-12-11 11:20:17 回复(0)