思路:1.库函数
这么写没有考虑到中间有多个空格的情况,"a good example(中间三个空格)"会分割成 a good 空格 空格 example,此时逆序会输出多余空格 example good a (中间三个空格)
2.双指针,从后往前开始遍历,记录单词左右索引边界 i , j ;
注意:返回值为sb.toString().trim();
去除首尾空格。
class Solution {
public static String reverseWords(String s) {
String[] strings = s.trim().split(" ");
StringBuilder sb = new StringBuilder();
for (int i = strings.length - 1; i >= 0; i--) {
if (i != 0){
sb.append(strings[i] + " ");
}else {
sb.append(strings[i]);
}
}
return sb.toString().trim();
}
}
class Solution {
public static String reverseWords(String s) {
String[] strings = s.trim().split(" ");
StringBuilder sb = new StringBuilder();
for (int i = strings.length - 1; i >= 0; i--) {
if (strings[i].equals("")) continue; // 碰到空单词,跳过。 空单词是"" 而不是" "
sb.append(strings[i] + " ");
}
return sb.toString().trim();
}
public static void main(String[] args) {
String s = "a good example";
System.out.println(reverseWords(s));
}
}
class Solution {
public static String reverseWords(String s) {
s = s.trim();
int j = s.length() - 1, i = j;
StringBuilder sb = new StringBuilder();
while (i >= 0){
while(i >= 0 && s.charAt(i) != ' ') i--; // 搜索单词的前一个空格
sb.append(s.substring(i + 1, j + 1) + " ");
while (i >= 0 && s.charAt(i) == ' ') i--; // 跳过单词间的空格 "a good example"
j = i; //j指向下个单词的尾字符
}
return sb.toString().trim();
}
public static void main(String[] args) {
String s = "a good example";
System.out.println(reverseWords(s));
}
}