华为OD机试 2025B卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为OD机试(JAVA)真题(A卷+E卷+B卷+C卷+D卷)》。
刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天优快云在线答疑。
一、题目描述
将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”。所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符。
数据范围:输入的字符串长度满足 1 ≤ n ≤ 1000 。
注意本题有多组输入。
二、输入描述
输入一个英文语句,每个单词用空格隔开。保证输入只包含空格和字母。
三、输出描述
得到逆序的句子
四、测试用例
测试用例1:
1、输入
I am a boy
2、输出
boy a am I
测试用例2:
1、输入
nowcoder
2、输出
nowcoder
五、解题思路
- 程序通过一个 while 循环和 Scanner 对象来持续读取用户输入的多行句子。
- 对每一行读入的句子,使用字符串的 split(" ") 方法,以空格为分隔符将其切割成一个一个的单词。这些单词被存储在一个字符串数组 String[] 中。
- 通过一个 for 循环,从后往前遍历这个单词数组(即从数组的最后一个元素到第一个元素)。在循环中,依次打印出每个单词,并在单词之间加上空格。
六、Java算法源码
public class OdTest {
public static void main(String[] args) {
// 创建 Scanner 对象以读取控制台输入
Scanner scanner = new Scanner(System.in);
// 使用 hasNextLine() 来处理多组输入,直到没有更多输入行为止
while (scanner.hasNextLine()) {
// 读取一整行输入
String line = scanner.nextLine();
// 使用正则表达式 "\\s+" 按一个或多个空格分割字符串,得到单词数组
// 这样做可以兼容单词间有多个空格的情况
String[] words = line.split("\\s+");
// 创建 StringBuilder 对象用于高效拼接字符串
StringBuilder reversedSentence = new StringBuilder();
// 从后向前遍历单词数组
for (int i = words.length - 1; i >= 0; i--) {
// 将当前单词追加到 StringBuilder
reversedSentence.append(words[i]);
// 如果不是第一个单词(即i>0),则在后面追加一个空格作为分隔符
if (i > 0) {
reversedSentence.append(" ");
}
}
// 打印最终结果,trim()方法用于移除可能存在于末尾的多余空格
// 在本代码的逻辑中,因为最后一个单词后面不加空格,所以trim()不是必须的,但这是一个好的编程习惯
System.out.println(reversedSentence.toString());
}
// 关闭 scanner
scanner.close();
}
}
七、效果展示
1、输入
nezha study gpt
2、输出
gpt study nezha
🏆下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 2025 B卷 200分)
🏆本文收录于,华为OD机试(JAVA)真题(A卷+E卷+B卷+C卷+D卷)
刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天优快云在线答疑。