Given an input string, reverse the string word by word.
For example,
Given s = "the sky is blue",
return "blue is sky the".
给定一个字符串,将里面包含的单词倒叙排列。我们可以将字符串通过空格分割成一个字符串数组,然后从后面开始组成一个新的字符串。这里要注意的是分割字符串我们用到了String的split()方法,split的参数类型是个正则表达式,不是简单的字符串,我们要用转义字符来写,例如用空格来分的话最好写成“\\s” 或者“\\s+”,代表通过一个空格或多个空格来分割。通过返回一个字符串数组的代码如下:
另外一种方法我们还可以从字符串末尾开始扫描,如果遇到空字符就跳过,知道遇到不为空的字符,标记当前字符的位置,然后继续扫描,直到遇到下一个为空的字符,用substring方法将这一段子串记录到新的字符串中,这样知道扫描完整个字符串。代码如下:
For example,
Given s = "the sky is blue",
return "blue is sky the".
给定一个字符串,将里面包含的单词倒叙排列。我们可以将字符串通过空格分割成一个字符串数组,然后从后面开始组成一个新的字符串。这里要注意的是分割字符串我们用到了String的split()方法,split的参数类型是个正则表达式,不是简单的字符串,我们要用转义字符来写,例如用空格来分的话最好写成“\\s” 或者“\\s+”,代表通过一个空格或多个空格来分割。通过返回一个字符串数组的代码如下:
public class Solution {
public String reverseWords(String s) {
String[] result = s.trim().split("\\s+");
StringBuilder sb = new StringBuilder();
for(int i = result.length - 1; i >= 0; i--) {
sb.append(result[i] + " ");
}
return sb.toString().trim();
}
}
另外一种方法我们还可以从字符串末尾开始扫描,如果遇到空字符就跳过,知道遇到不为空的字符,标记当前字符的位置,然后继续扫描,直到遇到下一个为空的字符,用substring方法将这一段子串记录到新的字符串中,这样知道扫描完整个字符串。代码如下:
public class Solution {
public String reverseWords(String s) {
if(s == null || s.length() == 0) return s;
StringBuilder sb = new StringBuilder();
for(int i = s.length() - 1; i >= 0 ; i--) {
if(s.charAt(i) == ' ') continue;
int end = i;
while(i >= 0 && s.charAt(i) != ' ') i --;
sb.append(s.substring(i + 1, end + 1)).append(" ");
}
return sb.toString().trim();
}
}