[LeetCode] 186. 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?
翻转字符串里的单词II。题意是给一个用char array的句子,请翻转单词的顺序。
思路是先翻转整个input数组,然后用快慢指针扫描input,快指针在空格的地方停下,翻转快慢指针之间的字符。
时间O(n)
空间O(n)
Java实现
1 class Solution { 2 public void reverseWords(char[] s) { 3 reverse(s, 0, s.length - 1); 4 int r = 0; 5 while (r < s.length) { 6 int l = r; 7 while (r < s.length && s[r] != ' ') { 8 r++; 9 } 10 reverse(s, l, r - 1); 11 r++; 12 } 13 } 14 15 private void reverse(char[] s, int i, int j) { 16 while (i < j) { 17 char temp = s[i]; 18 s[i] = s[j]; 19 s[j] = temp; 20 i++; 21 j--; 22 } 23 } 24 }
JavaScript实现
1 /** 2 * @param {character[]} s 3 * @return {void} Do not return anything, modify s in-place instead. 4 */ 5 var reverseWords = function (s) { 6 helper(s, 0, s.length - 1); 7 let r = 0; 8 while (r < s.length) { 9 let l = r; 10 while (r < s.length && s[r] != ' ') { 11 r++; 12 } 13 helper(s, l, r - 1); 14 r++; 15 } 16 }; 17 18 var helper = function (s, i, j) { 19 while (i < j) { 20 let temp = s[i]; 21 s[i] = s[j]; 22 s[j] = temp; 23 i++; 24 j--; 25 } 26 }
相关题目
151. Reverse Words in a String
186. Reverse Words in a String II