每日一道算法题 9(2023-12-17)(单词接龙)

题目描述 

 输入一个字符串,"-"分隔数值,如按k值反转(中信银行在线面试题)

 输入描述:
 输入为两行,第一行为参数K,第二行为字符串S。

 输出描述
 输出转换后的字符串


 案例一
 输入 2 1-2-3-4-5
 输出 2-1-4-3-5
 
 案例二
 输入 3 1-2-3-4-5-6-7-8-9-10
 输出 3-2-1-6-5-4-9-8-7-10

package com.tarena.test.B10;

import java.util.Arrays;
import java.util.LinkedList;
import java.util.Scanner;
import java.util.StringJoiner;
import java.util.stream.Collectors;
/**
 * @author Administrator
 *
 */
public class B19_zhongxin {

    public static void main(String[] args) {
        try(Scanner sc = new Scanner(System.in)){
            int k = Integer.parseInt(sc.nextLine());
            String str = sc.nextLine();
            LinkedList<Integer> list = Arrays.stream(str.split("-"))
                                        .map(Integer::parseInt)
                                        .collect(Collectors.toCollection(LinkedList::new));
            list = resultInt(list,k);
            StringJoiner sj = new StringJoiner("-");
            list.stream().map(p->String.valueOf(p)).forEach(sj::add);
            System.out.println(sj.toString());
        }    // 1-2-3-4-5-6-7-8-9-10
    }
    public static LinkedList<Integer> resultInt(LinkedList<Integer> list,int k){
        int index = 0;
        Integer temp = null;
        for(int i=0,len=list.size();i<len;) {
            index = i+k-1;
            //要交换的下标,没有超过数组长度
            if(index<len) {
                temp = list.get(index);
                list.set(index, list.get(i));
                list.set(i, temp);
                i+=k;
            }else {
                i++;
            }
        }
        return list;
    }
}
了解知识点

1 StringJoiner 类的使用

2 stream 流的使用规则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值