LeetCode 186. Reverse Words in a String II

Problem description:

Given an input string , reverse the string word by word. 

Example:

Input:  ["t","h","e"," ","s","k","y"," ","i","s"," ","b","l","u","e"]
inter : [
"e","u","l","b"," ","s","i"," ","y","k","s"," ","e","h","t"]
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?

 题解:
分为两步解决此问题,第一不是单词的颠倒,第二步是单词内的颠倒。
时间复杂度:O(n), 空间复杂度O(1)
 1 class Solution {
 2     public void reverseWords(char[] str) {
 3         int i = 0, j = str.length - 1;
 4         while(i < j) {
 5             swap(str, i++, j--);
 6         }
 7         for(i = 0; i < str.length; i++) {
 8             if(str[i] == ' ') continue;
 9             j = i;
10             while(j < str.length) {
11                 if(str[j] == ' ') {
12                     break;
13                 }
14                 j++;
15             }
16             int s = i, t = j - 1;
17             while(s < t) {
18                 swap(str, s++, t--);
19             }
20             i = j;
21         }
22         
23     }
24     private void swap(char[] str, int i, int j) {
25         char tmp = str[i];
26         str[i] = str[j];
27         str[j] = tmp;
28     }
29 }

 

 

posted @ 2019-04-22 10:52  起点菜鸟  阅读(159)  评论(0编辑  收藏  举报