• 翻转单词顺序列


    题目描述

    牛客最近来了一个新员工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;
        }
  • 相关阅读:
    CYPEESS USB3.0程序解读之---同步FIFO(slaveFifoSync)
    CYPEESS USB3.0程序解读之---GPIO
    USB 3.0 开发要点
    关于const声明一些东西
    __attribute__ 你知多少?
    char、signed char、unsigned char的区别总结。
    CentOS7安装配置SAMBA服务器
    linux版本FTP下载
    2021年1月29日
    2021年11月28日
  • 原文地址:https://www.cnblogs.com/Lune-Qiu/p/9180205.html
Copyright © 2020-2023  润新知