Java题解 | HJ13 #句子逆序#
句子逆序
https://www.nowcoder.com/practice/48b3cb4e3c694d9da5526e6255bb73c3
描述
将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符
数据范围:输入的字符串长度满足 1≤n≤1000
注意本题有多组输入
输入描述:输入一个英文语句,每个单词用空格隔开。保证输入只包含空格和字母。
输出描述:得到逆序的句子
解法
这里考点是分组、组间逆序、组内有序。同时,可以采用String的拆分和组合方法来方便实现。
l 将输入切分为字符串数组;
l 每个单词作为数组的元素;
l 数组首尾元素替换位置,以实现逆序;
l 输出数组。
/* * Copyright (c) waylau.com, 2022. All rights reserved. */ package com.waylau.nowcoder.exam.oj.huawei; import java.util.Scanner; /** * HJ13 句子逆序. * 描述:将一个英文语句以单词为单位逆序排放。 * 例如“I am a boy”,逆序排放后为“boy a am I” * 所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符 * 数据范围:输入的字符串长度满足 1≤n≤1000 * 注意本题有多组输入 * 输入描述:输入一个英文语句,每个单词用空格隔开。保证输入只包含空格和字母。 * 输出描述:得到逆序的句子 * * @author <a href="https://waylau.com">Way Lau</a> * @since 2022-08-07 */ public class HJ013SentenceReverseOrder { public static void main(String[] args) { // 输入一行,代表要计算值 Scanner sc = new Scanner(System.in); while (sc.hasNext()) { String in = sc.nextLine(); // 将输入切分为字符串数组; // 每个单词作为数组的元素; String[] inArray = in.split(" "); int len = inArray.length; for (int i = 0; i < len - 1; i++) { if (i < (len - 1 - i)) { // 数组首尾元素替换位置,以实现逆序; String head = inArray[i]; String tail = inArray[len - 1 - i]; inArray[i] = tail; inArray[len - 1 - i] = head; } } // 输出数组。 System.out.println(String.join(" ", inArray)); } // 关闭资源 sc.close(); } }
运行程序输出结果如下:
I am a boy
boy a am I
参考引用
- 本系列归档至https://github.com/waylau/nowcoder-exam-oj
- 《Java 数据结构及算法实战》:https://github.com/waylau/java-data-structures-and-algorithms-in-action
#华为机考#