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

  • 相关阅读:
    值传递和引用传递(不是引用类型的传递)的区别
    字符串一旦定义,就表示开辟好了指定的空间,其内容就不可改变
    String类的直接赋值和构造方法赋值的区别
    字符串常量是String类的匿名对象
    Integer和int的区别(转)
    final的好处
    数组引用传递
    构造代码块
    ==和equals()的不同点
    Redis数据类型底层实现
  • 原文地址:https://www.cnblogs.com/abc-begin/p/7581785.html
Copyright © 2011-2022 走看看