• 【leetcode】Reverse Words in a String


    今天第一次在leetcode上提交了一个题目,据说这个网站基本上都是名企面试笔试题,今天无意一进去就看到第一题居然就是昨天的腾讯实习生笔试题,赶紧注册了个账号做题。

    题目描述:

    Given an input string, reverse the string word by word.

    For example,
    Given s = "the sky is blue",
    return "blue is sky the".

     
    很简单的英文就不翻译了。题目不难但是做这个题我还是出现了几次错误的(不得不说实在是要小心啊),但是个人感觉错的还是很有价值的。
    先说一下题目思路:一看到这种翻转的题马上就想到了栈,于是乎把每个单词都读出来压栈,最后再输出就行了,于是乎交上了这样一份代码:
     1 class Solution {
     2 public:
     3     void reverseWords(string &s) {
     4         string temp;
     5         stack<string> sta;
     6         for(int i=0;i<s.length();i++)
     7         {
     8             if(s[i]!=' ')
     9             {
    10                 temp+=s[i];
    11             }
    12             else
    13             {
    14                 if(temp!="")
    15                 sta.push(temp);
    16                 temp="";
    17             }
    18         }
    19         if(temp!="")
    20             sta.push(temp);
    21         s="";
    22         while(sta.size()!=1)
    23         {
    24             s+=sta.top();
    25             sta.pop();
    26             s+=' ';
    27         }
    28         s+=sta.top();
    29     }
    30 };

     不得不说看起来很是正确啊自己也测试了一下各种空格的串,不管是前面后面都正确,但是交上去发现直接RE了。不过还好有提示(这个也是很向面试看齐的,感觉就是我给面试官那份代码,然后面试官问我,要是我输入的是空串你能正确输出吗?)这时候才发现我代码的不足于是乎赶紧加个判断,然后又想到全是空格的串会不会有问题?果然又发现了一个错误。。。再三检查后提交AC:

     1 class Solution {
     2 public:
     3     void reverseWords(string &s) {
     4         if(s=="")
     5             return ;
     6         string temp;
     7         stack<string> sta;
     8         for(int i=0;i<s.length();i++)
     9         {
    10             if(s[i]!=' ')
    11             {
    12                 temp+=s[i];
    13             }
    14             else
    15             {
    16                 if(temp!="")
    17                 sta.push(temp);
    18                 temp="";
    19             }
    20         }
    21         if(temp!="")
    22             sta.push(temp);
    23         s="";
    24 
    25         while(sta.size()>1)
    26         {
    27             s+=sta.top();
    28             sta.pop();
    29             s+=' ';
    30         }
    31         if(sta.empty())
    32         {
    33             s="";
    34         }
    35         else
    36         s+=sta.top();
    37     }
    38 };

    虽说这是一道不难的题目,但是也很好的训练了思维的严密性,还是很有帮助的。但是个人感觉leetcode的这种模式以及题目资源比较国内主要面向竞赛的oj来说还是很有优势的,也推荐各位找工作的博友可以一起刷刷题,巩固一下基础。

    ------------------------------------------update 20141122-----------------------------------------------------

    python版,一行代码解决

     1 class Solution:
     2     # @param s, a string
     3     # @return a string
     4     def reverseWords(self, s):
     5         return " ".join(s.split()[::-1])
     6         
     7 def main():
     8     s = Solution()
     9     print s.reverseWords("the sky is blue")
    10     
    11 if __name__ == '__main__':
    12     main()
  • 相关阅读:
    vuerouter-2.路由跳转
    vuerouter-1.路由基础
    vuebase-11._跨域处理
    vuebase-10_Axios配置
    vuebase--9._axios post请求
    vuebase--8._axios
    vuebase-7.过滤器
    vuebase-6.自定义指令
    vuebase-5.过渡和动画
    vuebase---4.实例生命周期
  • 原文地址:https://www.cnblogs.com/MrLJC/p/3663122.html
Copyright © 2020-2023  润新知