Reverse Words in a String
Given an input string, reverse the string word by word.
Example
Input:
["t","h","e"," ","s","k","y"," ","i","s"," ","b","l","u","e"]
Output:
["b","l","u","e"," ","i","s"," ","s","k","y"," ","t","h","e"]
Note:
A word is defined as a sequence of non-space characters.
The input string does not contain leading or trailing spaces.
The words are always separated by a single space.
Follow up: Could you do itin-placewithout allocating extra space?
Note
首先把整个数组翻转, the sky is blue -> eulb si yks eht 然后根据每个空格来把每一步都翻转回来即可 -> blue is sky the
时间O(n) 空间 O(1)
Code
public class Solution {
/**
* @param str: a string
* @return: return a string
*/
public char[] reverseWords(char[] str) {
if (str == null || str.length == 0) {
return str;
}
//翻转整个数组
reverse(str, 0, str.length - 1);
int index = 0;
//翻转每一个单词
for (int i = 0; i < str.length; i++) {
if (str[i] == ' ') {
reverse(str, index, i - 1);
index = i + 1;
}
}
//翻转最后一个单词
reverse(str, index, str.length - 1);
return str;
}
private void reverse(char[] str, int start, int end){
while (start <= end) {
char temp = str[start];
str[start] = str[end];
str[end] = temp;
start++;
end--;
}
}
}
Last updated