1.题目描述

2.题目链接
倒置字符串_牛客题霸_牛客网
3.代码解答
java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
// 按空格分割单词(处理多个连续空格的情况,split(" +") 匹配一个或多个空格)
String[] words = s.split(" +");
// 反转单词数组
int left = 0;
int right = words.length - 1;
while (left < right) {
// 交换左右指针的单词
String temp = words[left];
words[left] = words[right];
words[right] = temp;
left++;
right--;
}
// 拼接反转后的单词数组
StringBuilder result = new StringBuilder();
for (int i = 0; i < words.length; i++) {
result.append(words[i]);
// 最后一个单词后不添加空格
if (i != words.length - 1) {
result.append(" ");
}
}
System.out.println(result.toString());
}
}
4.解题思路
1)字符串数组逆序
先把输入的原字符串读入String类型的字符串中,再以正则表达式匹配到的一个或者多个的空格为分界符读入字符串数组中,最后以字符串数组中的字符串元素为单位,逆序排列。
2)双重逆序
先把整个字符串逆序,再对每一个单词进行逆序。但是算法题目中的StringBuilder的reverse方法并不支持部分逆序,只支持全部逆序。在二次逆序的时候,算法题目中的Stringbuilder的subString方法也支持只有start这一种。很不方便而且时间复杂度极高。
5.代码细节
1)正则表达式处理多个空格的情况,同时split方法分割字符串为字符串数组
java
// 按空格分割单词(处理多个连续空格的情况,split(" +") 匹配一个或多个空格)
String[] words = s.split(" +");
2)最后一个字符串数组元素后面不需要拼接空格
java
// 最后一个单词后不添加空格
if (i != words.length - 1) {
result.append(" ");
}