【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()

 

 

 

posted @ 2014-04-14 00:31  mrbean  阅读(1253)  评论(0编辑  收藏  举报