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(); } }