题目:
Given an input string, reverse the string word by word.
For example,
Given s = "the sky is blue
",
return "blue is sky the
".
1,首先整句反转,例如"the sky is blue" => "eulb si yks eht";
2,然后逐词反转
3,tips:去头尾空格,反转结束后,用正则式将多个空格替换有一个空格
解答:
public class Solution {
public String reverseWords(String s) {
char[] arr = s.trim().toCharArray();
int first = 0;
int last = arr.length - 1;
while (first < last) {
char tmp = arr[first];
arr[first] = arr[last];
arr[last] = tmp;
first++;
last--;
}
int i = 0;
int nowFirst = 0;
int nowLast = 0;
while (i < arr.length) {
if (arr[i] == ' ' || i == arr.length - 1) {
nowLast = i != arr.length - 1 ? i - 1 : i;
while (nowFirst < nowLast) {
char tmp = arr[nowFirst];
arr[nowFirst] = arr[nowLast];
arr[nowLast] = tmp;
nowFirst++;
nowLast--;
}
nowFirst = i + 1;
}
i++;
}
String res = String.valueOf(arr);
res = res.replaceAll("\\s{1,}", " ");
return res;
}
}