• 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中的代码已经算是很高效的了,想不出有哪里还可以继续改进……希望知道怎么改进的同学不吝赐教。

  • 相关阅读:
    LinkedList的使用方法
    规范HTML页面
    HTML总结(一)
    HTML标签学习总结
    java---线程池的使用
    java对excel表格的操作
    java对cookie及Session的操作
    硬盘分区工具gparted使用
    镜像, 转置, 锐化, 灰度,旋转
    ffmpeg解码
  • 原文地址:https://www.cnblogs.com/chenjx85/p/8982561.html
Copyright © 2020-2023  润新知