zoukankan      html  css  js  c++  java
  • 翻转单词顺序列

    题目描述

    牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
    最开始的解法:从后向前遍历数组,遇到空格则取得空格之后,下一个空格之前的字符串放入答案。由于第一个单词前没有空格,循环结束需要再放一次。
    但是这段代码的时间复杂度是O(n2),还申请了新空间。
    代码:
        string GetString(string str,int start,int end)
        {
            string s = "";
            for(int i = start; i < end;i++)
            {
                if(str[i] == ' ')
                    break;
                s += str[i];
            }
            return s;
        }
        string ReverseSentence(string str) {
            int len = str.length();
            string res = "";
            for(int i = len-1;i >= 0;i--)
            {
                if(str[i] == ' ')
                {
                    res += GetString(str,i+1,len);
                    res += " ";
                }
            }
            res += GetString(str,0,len);
            return res;
        }

    这个代码和我的是一个意思但是比我的操作简单一下:

        string ReverseSentence(string str) {
            string res = "", tmp = "";
            for(unsigned int i = 0; i < str.size(); ++i){
                if(str[i] == ' ') res = " " + tmp + res, tmp = "";
                else tmp += str[i];
            }
            if(tmp.size()) res = tmp + res;
            return res;
        }

    正确解法:注意这道题的题名,翻转字符串!和今天做的另一道 左旋转字符串是一个道理。

    代码:

        void Reverse(string &str,int i,int j)
        {
            char tmp;
            while(i<j)
            {
                tmp = str[i];
                str[i++] = str[j];
                str[j--] = tmp;
            }
        }
        string ReverseSentence(string str) {
            int len = str.length();
            int tmp = 0;
            for(int i = 0; i < len;i++)
            {
                if(str[i] == ' ')
                {
                    Reverse(str,tmp,i-1);
                    tmp = i+1;
                }
            }
            Reverse(str,tmp,len-1);
            Reverse(str,0,len-1);
            return str;
        }
  • 相关阅读:
    在visual studio 2010中调用ffmpeg
    RTP/RTCP/RTSP/SIP/SDP
    YV12数据与AVFrame的相互转换
    实现输出h264直播流的rtmp服务器
    RTMP协议发送H.264编码及AAC编码的音视频,实现摄像头直播
    CentOS 硬盘分区方案
    ubuntu默认root密码
    windows下ACE怎样安装与使用说明?
    CentOS 6.4 图文安装教程
    我自己的FFMpeg编译之路
  • 原文地址:https://www.cnblogs.com/Lune-Qiu/p/9180205.html
Copyright © 2011-2022 走看看