牛客网华为机试 【【中级】单词倒排】

文章目录

  • 题目描述
  • 题目分析
  • java 代码
  • 结果

题目描述

对字符串中的所有单词进行倒排。

说明:

  1. 每个单词是以26个大写或小写英文字母构成;
  2. 非构成单词的字符均视为单词间隔符;
  3. 要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;
  4. 每个单词最长20个字母;

输入描述:
输入一行以空格来分隔的句子

输出描述:
输出句子的逆序

示例
输入

I am a student

输出

student a am I

题目分析

非单词字符均是分隔符:
使用正则表达式匹配到非单词字符即可,然后使用 String.split() 方法切分,之后再将单词倒序拼接即可。

完成后,我测试了一把, 输出格式不对!!
纳尼??
最后,百度查了下,这题还要去除最终结果的两端的空格!!

因此,我的最终输出成了:

// sb 是 StringBuilder 的对象
System.out.println(sb.toString().trim());

java 代码

import java.util.Scanner;

/**
 * Created by Feng on 2020/2/18 16:31
 * CurrentProject's name is java8
 * 单词倒排
 */
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        while(input.hasNextLine()){
            String line = input.nextLine();
            // 按照 1 或多个空格切分字符串,包含 1 或多个非字母
            String[] words = line.split("[\\s]+|[^a-zA-Z]+");

            StringBuilder sb = new StringBuilder();
            for (int i = words.length - 1; i > 0; i--) {
                sb.append(words[i]).append(" ");
            }
            sb.append(words[0]);

            System.out.println(sb.toString().trim());

        }
    }
}

结果

牛客网华为机试 【【中级】单词倒排】_第1张图片

你可能感兴趣的:(牛客网华为机试)