原题链接在这里:https://leetcode.com/problems/reverse-words-in-a-string-ii/
题目:
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 it in-place without allocating extra space?
题解:
input变成 char array.
先reverse 全部 char array. 从头往后走,遇到空格或者array尾部,就reverse中间的单词.
Note: Do NOT forget i == n, reverse.
Time Compelxity: O(s.length()). Space: O(1).
AC Java:
1 public class Solution { 2 public void reverseWords(char[] s) { 3 if(s == null || s.length == 0){ 4 return; 5 } 6 reverse(s, 0, s.length-1); 7 8 int lo = 0; 9 for(int i = 1; i<=s.length; i++){ 10 if(i == s.length || s[i] == ' '){ 11 reverse(s, lo, i-1); 12 lo = i+1; 13 } 14 } 15 } 16 17 private void reverse(char [] s, int i, int j){ 18 while(i < j){ 19 swap(s, i++, j--); 20 } 21 } 22 23 private void swap(char [] s, int i , int j){ 24 char temp = s[i]; 25 s[i] = s[j]; 26 s[j] = temp; 27 } 28 }