zoukankan      html  css  js  c++  java
  • 557. Reverse Words in a String III【easy】

    557. Reverse Words in a String III【easy】

    Given a string, you need to reverse the order of characters in each word within a sentence while still preserving whitespace and initial word order.

    Example 1:

    Input: "Let's take LeetCode contest"
    Output: "s'teL ekat edoCteeL tsetnoc"
    

    Note: In the string, each word is separated by single space and there will not be any extra space in the string.

    解法一:

     1 class Solution {
     2 public:
     3     void reverseSelf(string & s, int start, int end)
     4     {
     5         while (start <= end) {
     6             char c = s[start];
     7             s[start] = s[end];
     8             s[end] = c;
     9             ++start;
    10             --end;
    11         }
    12     }
    13     
    14     string reverseWords(string s) {
    15         int i = 0;
    16         
    17         while (i < s.length()) {
    18             int j = i;
    19             while (j < s.length() && s[j] != ' ') {
    20                 ++j;
    21             }
    22             
    23             reverseSelf(s, i, j - 1);
    24             
    25             i = j + 1;
    26         }
    27         
    28         return s;
    29     }
    30 };

    无他,注意下标边界尔。

    解法二:

     1 public String reverseWords(String s) 
     2 {
     3     char[] s1 = s.toCharArray();
     4     int i = 0;
     5     for(int j = 0; j < s1.length; j++)
     6     {
     7         if(s1[j] == ' ')
     8         {
     9             reverse(s1, i, j - 1);
    10             i = j + 1;
    11         }
    12     }
    13     reverse(s1, i, s1.length - 1);
    14     return new String(s1);
    15 }
    16 
    17 public void reverse(char[] s, int l, int r)
    18 {
    19     while(l < r)
    20     {
    21         char temp = s[l];
    22         s[l] = s[r];
    23         s[r] = temp;
    24         l++; r--;
    25     }
    26 }

    参考@sooryaprasanna 的代码

    Step 1. Convert the string to char[] array
    Step 2. Whenever I encounter a space ' ' , I call the reverse function ( just to keep the code clean )
    Step 3. Repeat till the end!

    解法三:

     1 class Solution {
     2 public:
     3     string reverseWords(string s) {
     4         for (int i = 0; i < s.length(); i++) {
     5             if (s[i] != ' ') {   // when i is a non-space
     6                 int j = i;
     7                 for (; j < s.length() && s[j] != ' '; j++) { } // move j to the next space
     8                 reverse(s.begin() + i, s.begin() + j);
     9                 i = j - 1;
    10             }
    11         }
    12         
    13         return s;
    14     }
    15 };

    参考@alexander 的代码。

    补充一下reverse函数:

    reverse函数可以反转一个容器中的内容,包含在<algorithm>库中。

    1、函数原型

    reverse函数等同于下面的代码:

    1 template <class BidirectionalIterator> void reverse (BidirectionalIterator first, BidirectionalIterator last)
    2 {
    3      while ((first!=last)&&(first!=--last))
    4      {
    5           std::iter_swap (first,last);
    6           ++first;
    7      }
    8 }

    reverse函数使用iter_swap来交换两个元素。

    2、参数:first、last

    first和last是双向迭代器类型,reverse函数反转的范围是[first,last),所以包括first指向的元素,不包括last指向的元素。

    3、返回值

    reverse函数没有返回值。

    参考自:http://blog.csdn.net/u012877472/article/details/49557077

  • 相关阅读:
    【SCOI 2011】 糖果
    【POJ 3159】 Candies
    【POJ 1716】 Integer Intervals
    【POJ 2983】 Is the information reliable?
    【POJ 1364】 King
    【POJ 1201】 Intervals
    【POJ 1804】 Brainman
    6月10日省中提高组题解
    【POJ 3352】 Road Construction
    【POJ 1144】 Network
  • 原文地址:https://www.cnblogs.com/abc-begin/p/7581785.html
Copyright © 2011-2022 走看看