剑指 Offer 58 - I. 翻转单词顺序

题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"
解法一:双指针
思路:从后往前找单词的边界,用i指向单词的前一个位置,j指向单词的末尾
代码:
class Solution {
public String reverseWords(String s) {
String ans = s.trim();
StringBuilder sb= new StringBuilder();
int i=ans.length()-1;
int j=i;
while(i>=0){
while(i>=0&&ans.charAt(i) !=' '){ //找最后一个单词
i--;
}
sb.append(ans.substring(i+1,j+1)+" ");
while(i>=0&&ans.charAt(i) ==' '){ //找下一个单词的尾部
i--;
}
j=i;
}
return sb.toString().trim();
}
}

解法二:切割
思路:从后往前将切割好的字符串数组添加到StringBuilder中
class Solution {
public String reverseWords(String s) {
String[] ans = s.trim().split(" +");
StringBuilder sb =new StringBuilder();
for(int i=ans.length-1;i>=0;i--){
sb.append(ans[i]+" ");
}
return sb.toString().trim();
}
}

posted @ 2020-11-10 16:44  for_ward  阅读(57)  评论(0)    收藏  举报