题目描述
解题思路
以空格为分割逐个查找单词,翻转单词。
- 使用两个指针(left、right)分别指向单词的首尾;
(1)当s[right]不为空格时,right右移,left不变;
(2)当s[right]是空格时,确定一个单词的位置(s[left ~ right - 1]),将其翻转。
(3)当right移动至s[s.length-1],即字符串最后一个字符时,s[left ~ right]就确定了最后一个单词,将其翻转。结束。
代码实现
class Solution {
/**
* 翻转字符串
* ch: 待翻转的字符数组
* left:翻转字符起始下标
* right:翻转字符末尾下标
*/
public void reserve(char[] ch, int left, int right){
char temp;
while(left<right){
temp = ch[left];
ch[left] = ch[right];
ch[right] = temp;
++left;
--right;
}
}
public String reverseWords(String s) {
char[] ch = s.toCharArray(); //String为不可变类型,将其转换为字符数组形式进行操作
int left = 0, right = 0;
while(right < ch.length){
if(ch[right] == ' '){
reserve(ch, left, right-1);
left = right + 1;
}
if(right == ch.length - 1){
reserve(ch, left, right);
}
++right;
}
return new String(ch); //返回字符串
}
}