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 }

 

 
 
 

转载于:https://www.cnblogs.com/rookielet/p/10748875.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值