• HappyLeetcode1 Reverse Words in a String


    HappyLeetcode1:Reverse Words in a String

    题目描述:

    题目思考:

    1. 建立一个数组,每个数组存储一个单词。
    2. 将该数组倒序输出,每输出一个单词后,紧跟着输出一个空格。

    题目解题代码

    Python

    class Solution:

        # @param s, a string

        # @return a string

        def reverseWords(self, s):

            slist=[]

            slist=s.split()

            for i in range(len(slist)/2):

                     slist[i],slist[len(slist)-1-i]=slist[len(slist)-1-i],slist[i]

             return ' '.join(slist)

    C++

    class Solution {

    public:

        void reverseWords(string &s) {

            if(s.empty())

                return;

           

            //remove heading and trailing spaces

            int i = 0;

            while(i<s.size() && s[i] == ' ')

                i++;

            if(i == s.size())

            {

                s = "";

                return;

            }

            int j = s.size() - 1;

            while(j>=0 && s[j] == ' ')

                j--;

            if(j == -1)

            {

                s = "";

                return;

            }

           

            s = s.substr(i,j - i + 1);

           

            size_t pos = 0;

            vector<string> strs;

            size_t begin = 0;

            while(begin < s.size())

            {

                pos = s.find_first_of(' ',begin);

                if(pos == begin)

                {

                    begin++;

                    continue;

                }

                else if(pos != -1)

                    strs.push_back(s.substr(begin,pos - begin));

                else  //pos == -1, the end

                {

                    strs.push_back(s.substr(begin,s.size() - 1 - begin + 1));

                    break;

                }

                begin = pos + 1;

            }

           

            string ans;

            for(int i = strs.size() - 1; i > 0; i--)

            {

                ans += strs[i];

                ans += " ";

            }

            ans += strs[0];

            

            s = ans;

        }

    };

    题后总结

    1. ' '.join(slist) 堪称列表转字符串的神表达。

    官网答案

    One simple approach is a two-pass solution: First pass to split the string by spaces into an array of words, then second pass to extract the words in reversed order.

    We can do better in one-pass. While iterating the string in reverse order, we keep track of a word’s begin and end position. When we are at the beginning of a word, we append it.

  • 相关阅读:
    JS基础学习
    Java_iText_PDF—生成PDF工具
    vc++ 编译连接错误and解决方法
    C++ 数据类型【转】
    jsp两种include指令区别
    程序员面试宝典问题及解析
    vc++6.0快捷键
    vue动态绑定图片和背景图
    配置webpack中dev.env.js、prod.env.js,解决不同命令下项目启动和打包到指定的环境
    配置webpack中externals来减少打包后vendor.js的体积
  • 原文地址:https://www.cnblogs.com/chengxuyuanxiaowang/p/4161531.html
Copyright © 2020-2023  润新知