牛客网华为机试 【【中级】单词倒排】
程序员文章站
2024-03-11 22:20:13
...
题目描述
对字符串中的所有单词进行倒排。
说明:
- 每个单词是以26个大写或小写英文字母构成;
- 非构成单词的字符均视为单词间隔符;
- 要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;
- 每个单词最长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());
}
}
}