目录
翻转单词顺序
描述
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。
示例 1
输入
"the sky is blue"
输出
"blue is sky the"
示例 2
输入
" hello world! "
输出
"world! hello"
解释
输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
示例 3
输入
"a good example"
输出
"example good a"
解释
如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
说明
无空格字符构成一个单词。
输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
方法:倒序迭代
首先我们利用trim方法去除前后的空格,然后利用split方法用空格" "分割字符串得到一个字符串数组。
接着我们遍历这些字符串,获取非空字符串的words数组,然后倒序遍历添加到结果中,每个单词之间用空格隔开即可。
class Solution {
public String reverseWords(String s) {
String[] strings = s.trim().split(" ");//去掉前后的空格,按照空格将字符分割为不同的字符串
if (strings.length==1 && "".equals(strings[0])) return "";//如果字符都是空格或者为空,则返回字符本身
List<String> list=new ArrayList<>();
for (int i = 0; i < strings.length; i++) {
if (!"".equals(strings[i])){
list.add(strings[i]);//获取所有单词,不包含空格
}
}
Object[] words = list.toArray();
int len=words.length;
StringBuffer stringBuffer=new StringBuffer();
for (int i = words.length-1; i >=0; i--) {
stringBuffer.append(words[i]+" ");//倒序添加到结果中,每个字符中间添加一个空格隔开
}
stringBuffer.deleteCharAt(stringBuffer.length()-1);//删除最后多余的空格
return stringBuffer.toString();
}
}