码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode] Reverse Words in a String

时间:2016-08-17 13:58:14      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:

题目链接: https://oj.leetcode.com/problems/reverse-words-in-a-string/

 

问题:

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

For example,

Given s = "the sky is blue",

return "blue is sky the”.

 

针对本题可能存在的疑惑:

1)单词的组成结构?

不包含空格的字符序列

2)tab和换行是否作为空格进行操作?

假设输入不包含tab和换行

3)输入字符串的首尾是否能够包含空格?

可以包括,但是反转后的字符串的首尾不包含空格

4)如果在两个单词之间包含多个空格如何处理?

将多个空格减少到1个

 

解题思路:

思路一:根据空格切分字符串,将切分得到的子串(单词)逆序存入新开辟的字符串中。

方法:

指针i从字符串的尾部向头部移动

a. 如果i指向的字符不为’’ ’’,

    a)若i-1指向的也不为“ ”,i—

    b)若i-1指向的字符为“ ”,

    如果新的字符串为空,直接将尾部的单词存入,否则存入“ ”+ 尾部的单词

b. 如果i指向的字符为’’ ’’,将字符串缩短为

 1     public String reverseWords(String s) {
 2         StringBuilder reversed = new StringBuilder();
 3         int strLen = s.length();
 4         for(int i = s.length() - 1; i >= 0; i--){
 5             if(s.charAt(i) == ‘ ‘){
 6                 strLen = i;
 7             }else if(i == 0 || s.charAt(i-1) == ‘ ‘){
 8                 if(reversed.length() != 0){
 9                     reversed.append(‘ ‘);
10                 }
11                 reversed.append(s.substring(i,strLen));
12             }
13         }
14         return reversed.toString();
15     }

时间复杂度O(n),空间复杂度O(n)

 

思路二:先对每个单词进行逆转,然后对整个字符串进行逆转

(若要满足条件4),输入字符串中每两个单词中只有一个空格间隔);

方法:

先对每个单词进行逆转,得到结果“eht yks si eulb",然后再整体逆转即可得到"blue is sky the”。

 1     public void reverseWords(char[] s){
 2         for (int i = 0, j = 0; j <= s.length; j++) {
 3             if (j == s.length || s[j] == ‘ ‘) {
 4                  reverse(s, i, j);
 5                  i = j + 1;
 6                  } 
 7               }
 8         reverse(s, 0, s.length);
 9     }
10     
11     private void reverse(char[] s, int begin, int end){
12         for(int i = 0; i < (end - begin)/2; i++){
13             char temp = s[begin + i];
14             s[begin + i] = s[end - i - 1];
15             s[end - i - 1] = temp;
16         }
17     }

优点:不需要分配额外空间,时间复杂度O(N), 空间复杂度O(1)

[LeetCode] Reverse Words in a String

标签:

原文地址:http://www.cnblogs.com/momo-fun/p/5779472.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!