剑指 offer 58-01 翻转单词顺序
分割+倒序
class Solution {
public String reverseWords(String s) {
s.trim();//删除首尾空格
String[] strs = s.split(" ");
StringBuilder sb = new StringBuilder();
for (int i=strs.length-1;i>=0;i--){
if(!strs[i].equals(""))
sb.append(strs[i]+" ");
}
return sb.toString().trim();
}
}
双指针
class Solution {
public String reverseWords(String s) {
StringBuilder res = new StringBuilder();
int i,j;
j = s.length()-1;
i = s.length()-1;
while(i>=0 && s.charAt(i)==' '){
i--;
}
j=i;
//j是单词末尾
//i是单词首
while (i>=0){
while(i>=0 && s.charAt(i)!=' '){
i--;
}
//出循环说明charAt(i)是空格
res.append(s.substring(i+1,j+1)+" ");
while(i>=0 && s.charAt(i)==' '){
i--;
}
j=i;
}
return res.toString().trim();
}
}
时间复杂度
O
(
n
)
O(n)
O(n)。
空间复杂度
O
(
n
)
O(n)
O(n)。