例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
- String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。
- StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过StringBuffer提供的append()、insert()、reverse()、setCharAt()、setLength()等方法可以改变这个字符串对象的字符序列。一旦通过StringBuffer生成了最终想要的字符串,就可以调用它的** toString**方法将其转换为一个String对象。
class Solution {
public String reverseWords(String s) {
//先去掉空格
//双指针法从后向前遍历,前边的指针遍历到空格停止(i+1,j+1)add到stringBuilder
//然后处理两个指针,最终再次回到两个指针都指向单词最后一个的状态 i-- ,j=i
s = s.trim(); // 删除首尾空格
int j = s.length() - 1, i = j;
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; // j 指向下个单词的尾字符(重新构造一个i,j都指向单词的最后一个字符的情况)
}
return res.toString().trim(); // 转化为字符串并返回,去掉最后一个空格
}
}