zoukankan      html  css  js  c++  java
  • leetcode-557-Reverse Words in a String III

    题目描述:

    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.

    要完成的函数:

    string reverseWords(string s) 

    说明:

    1、这道题目不难,找到空格的位置,然后把空格前的单词做个反转,一直处理到最后碰到''。

    2、考虑一下全过程,定义两个位置index,一个记录起始位置i,一个一直循环直到遇到空格,记录空格符前一位的位置j。然后在i和j之间做一个反转,直接在字符串上实现就好了。

    j一直循环下去,不断+1,直到碰到下一个空格字符。继续这样子处理。

    直到最后j不会小于string的长度,这时候退出循环,返回原本字符串就可以了。

    代码如下:

        string reverseWords(string s) 
        {
            int i=0,j=0,t1;
            char t;//交换字母的临时变量
            int s1=s.size();
            while(j<s1)
            {
                while(s[j]!=' '&&j<s1)
                    j++;
                t1=j+1;//下一个单词开始的地方
                j--;//空格前一个字符
                while(i<j)
                {
                    t=s[i];
                    s[i]=s[j];
                    s[j]=t;
                    i++;
                    j--;
                }
                i=t1;//更新i到下一个单词的首字母位置
                j=t1+1;//j依然在i的下一位
            }
            return s;
        }

    上述代码实测25ms,beats 52.53% of cpp submissions。

    3、改进:

    在讨论区中看到有人使用了reverse函数,测试了一下,就变成了beats 98.76%……

    同样分享给大家,代码如下:

        string reverseWords(string s) 
        {
            int i=0,j=0,t1;
            char t;
            int s1=s.size();
            while(j<s1)
            {
                while(s[j]!=' '&&j<s1)
                    j++;
                reverse(&s[i], &s[j]);
                i=j+1;//i更新到下一个单词的首位
                j=i+1;//j在i的下一位
            }
            return s;
        }

    上述代码实测22ms,beats 98.76% of cpp submissions。

    花费时间变少了,可能是因为reverse函数被优化了?笔者其实觉得2中的代码已经算是很高效的了,想不出有哪里还可以继续改进……希望知道怎么改进的同学不吝赐教。

  • 相关阅读:
    CF 142B Tprimes
    CF 231A Team
    poj 2001 Shortest Prefixes ——字典树入门
    hdu 1039 Easier Done Than Said?
    poj 2528 Mayor's posters
    hdu 1061 Rightmost Digit
    poj 2503 Babelfish
    CF271 A. Beautiful Year
    poj 2752
    CF271 B. Prime Matrix
  • 原文地址:https://www.cnblogs.com/chenjx85/p/8982561.html
Copyright © 2011-2022 走看看