11、按单词下标区间翻转文章内容——华子机试必知必会

189 阅读1分钟

题目描述

给定一段英文文章片段,由若干单词组成,单词间以空格间隔,单词下标从0开始。

请翻转片段中指定区间的单词顺序并翻转后的内容。

例如个给定的英文文章片段为"I am a developer",翻转区间为[0,3],则输出"developer a am I"。

String reverseWords(String s,int start, int end)

输入描述

使用换行隔开三个参数,第一个参数为英文文章内容即英文字符串,第二个参数为待翻转内容起始单词下标,

第三个参数为待翻转内容最后一个单词下标。

输出描述

翻转后的英文文章片段所有单词之间以一个半角空格分隔进行输出

备注:

英文文章内容首尾无空格

示例1

输入

I am a developer
1
2

输出

I a m developer

题解

    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入英文字符串:");
        String input = sc.nextLine();
        System.out.println("请输入翻转起始下标:");
        List<Integer> indexes = new ArrayList<>();
        for (int i = 0; i < 2; i++) {
            indexes.add(sc.nextInt());
        }
        System.out.println(flipContent(input, indexes));
    }

    /**
     * 按单词下标区间翻转文章内容
     *
     * @param content
     * @return
     */
    public static String flipContent(String content, List<Integer> indexes){
        String[] infos = content.split(" ");
        Integer start = indexes.get(0);
        Integer end = indexes.get(1);
        Stack<String> stack = new Stack<>();
        //将翻转的内容放入栈中
        for (int i = start; i <= end; i++) {
            stack.push(infos[i]);
        }
        List<String> flipContent = new ArrayList<>();
        for (int i = 0; i < infos.length; i++) {
            if (start <= i && i <= end) {
                String flipInfo = stack.pop();
                flipContent.add(flipInfo);
            }else {
                flipContent.add(infos[i]);
            }
        }
        return flipContent.toString().replaceAll(",","").replaceAll("\\[|\\]","");
    }