(字节跳动)回文解码 & 出专辑

这篇博客探讨了两个算法问题:一是关于字符串的回文解码操作,通过给出的字符串和操作指令,实现字符串的翻转并插入;二是计算音乐专辑所需的CD数量,考虑了CD容量、歌曲间隔及辟邪条件。涉及字符串处理和优化问题解决策略。
摘要由CSDN通过智能技术生成

1 回文解码

题目
现在有一个字符串,你要对这个字符串进行 n 次操作,每次操作给出两个数字:(p, l) 表示当前字符串中从下标为 p 的字符开始的长度为 l 的一个子串。你要将这个子串左右翻转后插在这个子串原来位置的正后方,求最后得到的字符串是什么。字符串的下标是从 0 开始的,你可以从样例中得到更多信息。
思路

var s_1 = s.substr(p,l).split('').reverse().join('')
s = s.slice(0,p+l) + s_1 + s.slice(p+l)

代码 javascript

process.stdin.resume();
process.stdin.setEncoding('ascii');

var input = "";
var input_array = "";

process.stdin.on('data', function (data) {
    input += data;
});

process.stdin.on('end', function () {
    input_array = input.split("\n");
    var nLine = 0;
    
    while(nLine < input_array.length){
        var line = input_array[nLine++].trim();
        if(line === ''){
            continue;
        }
        var s = line;
        var n = +input_array[nLine++];
        while(n--){
            var input_arrays = input_array[nLine++].trim().split(' ');
            var p = +input_arrays[0];
            var l = +input_arrays[1];

            //你的代码
            //console.log('s_before',s);
            //console.log(p);
            //console.log(l)
            var s_1 = s.substr(p,l).split('').reverse().join('')
            s = s.slice(0,p+l) + s_1 + s.slice(p+l)
            //console.log('s_1',s_1)
            //console.log('s_after',s);
            
        }
        console.log(s);
        return s;
    }
    
});

2 出专辑

题目
你作为一名出道的歌手终于要出自己的第一份专辑了,你计划收录 n 首歌而且每首歌的长度都是 s 秒,每首歌必须完整地收录于一张 CD 当中。每张 CD 的容量长度都是 L 秒,而且你至少得保证同一张 CD 内相邻两首歌中间至少要隔 1 秒。为了辟邪,你决定任意一张 CD 内的歌数不能被 13 这个数字整除,那么请问你出这张专辑至少需要多少张 CD ?
思路

代码 javascript

process.stdin.resume();
process.stdin.setEncoding('ascii');

var input = "";
var input_array = "";
var n;
var s;
var l;

process.stdin.on('data', function (data) {
    input += data;
});

function do_something(n, s, l){
	//你的代码
    var single = Math.floor(l / (s + 1));
    if (single % 13 === 0) single--;
    if (s === l) single = 1;
    
    var res = Math.ceil(n / single)
    
    if (res === 1 && n % 13 === 0) res++;
    
    console.log(res)
}

process.stdin.on('end', function () {
    input_array = input.split("\n");
    var nLine = 0;
    while(nLine < input_array.length){
        var line = input_array[nLine++].trim();
        if(line === ''){
            continue;
        }
        var input_arrays = line.split(' ');
        n = +input_arrays[0];
        s = +input_arrays[1];
        l = +input_arrays[2];
     
		do_something(n, s, l);
        
    }
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值