HJ13 句子逆序

184 阅读2分钟

Problem: HJ13 句子逆序

题目描述

描述

将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”

所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符

数据范围:输入的字符串长度满足 1n10001≤n≤1000 

注意本题有多组输入

输入描述:

输入一个英文语句,每个单词用空格隔开。保证输入只包含空格和字母。

输出描述:

得到逆序的句子

示例1

输入:I am a boy
输出:boy a am I

解题思路

使用substring方法

算法流程

  1. 使用scanner.nextLine()方法读取输入的句子,并将其存储在sentence变量中。
  2. 使用空格作为分隔符,将句子拆分成单词数组,存储在words变量中。
  3. 创建一个StringBuilder对象reversedSentence,用于存储反转后的句子。
  4. 使用循环从最后一个单词开始遍历words数组,将每个单词追加到reversedSentence中,并在单词之间添加一个空格。
  5. 最后,使用toString()方法将reversedSentence转换为字符串,并使用trim()方法去除首尾的空格。
  6. 使用System.out.println()方法将反转后的句子打印到控制台。

代码

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String sentence = scanner.nextLine();

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

        System.out.println(reversedSentence.toString().trim());
    }
}

复杂度

  • 时间复杂度:

添加时间复杂度, 示例: O(nlogn)O(n*log^n)

  • 拆分句子成单词数组的操作需要遍历整个句子,时间复杂度为O(n),其中n是句子的长度。
  • 遍历单词数组并将单词追加到StringBuilder对象中的操作需要遍历整个单词数组,时间复杂度为O(m),其中m是单词的个数。
  • 最后将StringBuilder对象转换为字符串的操作需要遍历StringBuilder对象中的字符,时间复杂度为O(k),其中k是StringBuilder对象中的字符个数。
  • 因此,总的时间复杂度为O(n + m + k)。
  • 空间复杂度:

添加空间复杂度, 示例: O(N)O(N)

  • 创建了一个Scanner对象和一个StringBuilder对象,它们的空间复杂度都是O(1)。
  • 创建了一个字符串数组来存储拆分后的单词,它的空间复杂度为O(m),其中m是单词的个数。
  • 最后将StringBuilder对象转换为字符串,需要额外的空间来存储转换后的字符串,空间复杂度为O(k),其中k是StringBuilder对象中的字符个数。
  • 因此,总的空间复杂度为O(m + k)。