题目:
思路:
①切割字符串
首先要忽略字符串首尾的空格
str = str.trim();
其次按(一个或多个)空格对字符串进行切割
String[] strs = str.split("\s+");
②对字符串数组进行翻转
③单词间用空格分割并输出
代码:
import java.util.Collections;
class Solution {
public static String reverseWords(String s) {
s = s.trim();
String[] strs = s.split("\\s+");//分割一个或多个空格
int len = strs.length;
for(int i = 0; i < len/2; i++){
String temp = strs[i];
strs[i] = strs[len-1-i];
strs[len-1-i] = temp;
}
StringBuffer sb = new StringBuffer();
for(int i = 0; i < len; i++){
if(i < len - 1){
sb.append(strs[i]+" ");
}
else if (i == len - 1)
sb.append(strs[i]);
}
String ans = sb.toString();
return ans;
}
}
复杂度分析:
时间复杂度:O(N), N为字符串长度
空间复杂的:O(N)
官方做法:
class Solution {
public String reverseWords(String s) {
// 除去开头和末尾的空白字符
s = s.trim();
// 正则匹配连续的空白字符作为分隔符分割
List<String> wordList = Arrays.asList(s.split("\\s+"));
Collections.reverse(wordList);
return String.join(" ", wordList);
}
}
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/reverse-words-in-a-string/solution/fan-zhuan-zi-fu-chuan-li-de-dan-ci-by-leetcode-sol/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
TIPS:
数组反转:
① 把array转为list : List<T> list = Arrays.asList(array)
② 反转list: Collections.reverse(list)
字符串拼接:
String.join(" ", list)
public static String join(CharSequence delimiter,
CharSequence... elements)
返回一个由 CharSequence elements副本的新字符串连接在一起的一份指定的 delimiter。
For example,
String message = String.join("-", "Java", "is", "cool");
// message returned is: "Java-is-cool"