- 前言
- 一、双指针
- 1、源码
- 二、分割法
- 1、源码
- 总结
一、双指针可以使用双指针来完成,或是将字符串通过库函数分割成字符串数组,然后到起来组合。
1、源码通过两个指针从后到前来拿到一段字符即一个单词。不断更新两个指针来完成倒叙。
//剑指offer.58-I翻转单词顺序
public String reverseWords(String s) {
//将前面的单词和对应后面的单词互换。
StringBuilder cache = new StringBuilder();
s = s.trim();
int slow = s.length(), fast = s.length() - 1;
for (; fast >= 0; fast--) {
if (s.charAt(fast) == ' ') {
cache.append(s.substring(fast + 1, slow)).append(' ');
while (fast > 0) {
fast--;
if (s.charAt(fast) != ' ') {
slow = fast + 1;
break;
}
}
}
}
return cache.append(s.substring(0, slow)).toString();
}
二、分割法
1、源码使用Java库函数split来分成字符串数组,然后不要里面的空字符串“”,然后倒叙连接起来。
public String reverseWords(String s) {
String[] strs = s.trim().split(" "); // 删除首尾空格,分割字符串
StringBuilder cache = new StringBuilder();
for (int i = strs.length - 1; i > 0; i--) { // 倒序遍历单词列表
if ("".equals(strs[i])) continue; // 遇到空单词则跳过
cache.append(strs[i]).append(' '); // 将单词拼接至 StringBuilder
}
return cache.append(strs[0]).toString(); // 转化为字符串,删除尾部空格,并返回
}
总结
1)找到知识与问题的联系,然后理清思路,最后再写代码。



