Problem: HJ13 句子逆序
题目描述
描述
将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符
数据范围:输入的字符串长度满足
注意本题有多组输入
输入描述:
输入一个英文语句,每个单词用空格隔开。保证输入只包含空格和字母。
输出描述:
得到逆序的句子
示例1
输入:
I am a boy
输出:boy a am I
解题思路
使用substring方法
算法流程
- 使用
scanner.nextLine()方法读取输入的句子,并将其存储在sentence变量中。- 使用空格作为分隔符,将句子拆分成单词数组,存储在
words变量中。- 创建一个StringBuilder对象
reversedSentence,用于存储反转后的句子。- 使用循环从最后一个单词开始遍历
words数组,将每个单词追加到reversedSentence中,并在单词之间添加一个空格。- 最后,使用
toString()方法将reversedSentence转换为字符串,并使用trim()方法去除首尾的空格。- 使用
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(n),其中n是句子的长度。
- 遍历单词数组并将单词追加到StringBuilder对象中的操作需要遍历整个单词数组,时间复杂度为O(m),其中m是单词的个数。
- 最后将StringBuilder对象转换为字符串的操作需要遍历StringBuilder对象中的字符,时间复杂度为O(k),其中k是StringBuilder对象中的字符个数。
- 因此,总的时间复杂度为O(n + m + k)。
- 空间复杂度:
添加空间复杂度, 示例:
- 创建了一个Scanner对象和一个StringBuilder对象,它们的空间复杂度都是O(1)。
- 创建了一个字符串数组来存储拆分后的单词,它的空间复杂度为O(m),其中m是单词的个数。
- 最后将StringBuilder对象转换为字符串,需要额外的空间来存储转换后的字符串,空间复杂度为O(k),其中k是StringBuilder对象中的字符个数。
- 因此,总的空间复杂度为O(m + k)。