给你一个字符串 s ,请你反转字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。
输入:s = "a good example"
输出:"example good a"
解释:如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。
方法1 : 递归
trim()方法
subString()的大量使用
class Solution {
public String reverseWords(String s) {
//递归方法
//String的trim()方法:返回一个字符串,其值为此字符串,并删除任何前导和尾随空格。
s = s.trim();
int len = s.length();
while(len > 0){
len--;
//检测到空格,输出空格至串尾的部分,并将串s裁剪为空格前的部分,递归裁剪后的s。
if(s.charAt(len) == ' '){
String word = s.substring(len+1,s.length());
return word + " " + reverseWords(s.substring(0,len));
}
}
return s;
}
}
方法2:数组的翻转 + 空格剪切
要点难点:
while(len--)的妙用;
split()的最基础应用;
使用StringBuffer;
toString()方法。
public static String reverseWord(String s){
//split(“a”)方法:用a分割字符串组成数组。
// 这里的是用空格分割s,但单词内部还可能残余空格,需要后续去除
String[] wordArray = s.split(" ");
int len = wordArray.length;
//构建StringBuffer,方便进行数组操作,并保存翻转后的结果
StringBuffer stringBuffer = new StringBuffer();
while(len-- > 0){
//len--先执行表达式再赋值
//数组的翻转:从后往前遍历数组,遇到空格跳过。
// 若非空格,则将索引为len的字符串添加至stringBuffer中
if(! wordArray[len].isEmpty()){
//当stringBuffer非空时,用空格隔开相邻的单词
if(stringBuffer.length()>0){
stringBuffer.append(" ");
}
stringBuffer.append(wordArray[len]);
}
}
//用toString()方法输出stringBuffer的内容
return stringBuffer.toString();
}