剑指 Offer 58 - I. 翻转单词顺序
程序员文章站
2022-04-30 18:26:05
...
题目:
leetcode上面这道题与书上有些许不同,leetcode还考虑句子首尾和末尾有空格的情况,以及单词之间存在多个空格。
思路1:
这道题目的核心就是将单词顺序反转,不是一味地从头到尾将所有英文字母反转。因此可以借助于两个辅助指针,从尾到头进行扫描单词,利用StrinBuilder的append函数倒序地添加字符串中的单词。String的trim函数用于剔除字符串首尾的空格。
代码:
class Solution {
public String reverseWords(String s) {
s = s.trim();
int i = s.length() - 1, j = i;
StringBuilder res = new StringBuilder();
while (i >= 0) {
while (i >=0 && s.charAt(i) != ' ') i--;//找到第一个空格,即单词的首字母前一个位置
res.append(s.substring(i + 1, j + 1) + " ");
while (i >= 0 && s.charAt(i) == ' ') i--;//寻找到下一个单词的尾字母
j = i;
}
return res.toString().trim();
}
}
思路2:
先剔除字符串首尾的空格,然后利用split()函数,根据空格划分,返回一个String[]数组。然后用循环,从尾部到头部顺序添加单词。注意,单词之间有n个空格时,数组中会产生n-1个""空字符串。所以循环中,遇到""时直接跳过即可。
代码:
class Solution {
public String reverseWords(String s) {
String[] tmp = s.trim().split(" ");
StringBuilder res = new StringBuilder();
for (int i = tmp.length - 1; i >= 0; i--) {
if (tmp[i].equals("")) continue;
res.append(tmp[i] + " ");
}
return res.toString().trim();
}
}
上一篇: 技术不息 刷机不死