地址:https://leetcode-cn.com/problems/reverse-words-in-a-string/
注意题目中的说明:
- 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括;
- 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
做这道题的经验完全来自于「力扣」第 189 题:旋转数组。
Java 代码:
public class Solution {
public String reverseWords(String s) {
// 去掉前后的空格,并且将一个空格以上的空格替换成一个空格
s = s.trim().replaceAll("\\s+", " ");
int len = s.length();
char[] charArray = s.toCharArray();
reverse(charArray, 0, len - 1);
int index = 0;
for (int i = 0; i < len; i++) {
if (charArray[i] == ' ') {
reverse(charArray, index, i - 1);
index = i + 1;
}
}
reverse(charArray, index, len - 1);
return String.valueOf(charArray);
}
private void reverse(char[] chars, int left, int right) {
while (left < right) {
swap(chars, left, right);
left++;
right--;
}
}
private void swap(char[] chars, int index1, int index2) {
char temp = chars[index1];
chars[index1] = chars[index2];
chars[index2] = temp;
}
public static void main(String[] args) {
Solution solution = new Solution();
String s = " hello world! ";
String res = solution.reverseWords(s);
System.out.println(res);
}
}