码迷,mamicode.com
首页 > 其他好文 > 详细

151. Reverse Words in a String

时间:2016-09-10 13:13:22      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:

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

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

Solution1: 不使用任何functiion

昨天expedia面试自己把题意理解错了,没过之后还郁闷不已。今天重新做了一遍,发现如果限制各种function的话,很多corner case要考虑,改来改去花了好久。所以昨天没过还是自己实力所致,没什么好抱怨的。 

思路:用stack读,碰到空格输出stack的数,用stringbuilder把字母连起来。但是有很多cornercase,比如"  a  ",因此用prev=‘ ’来记录之前是不是已经碰到一个空格了。如果是又读到一个新字母,就更新prev变成任何一个其他数来区别于空格。最后循环结束后要把stack清空,然后判断是不是会出现“a ", 把最后一个空格清空。感觉做的很麻烦。

public class Solution {
    public String reverseWords(String s) {

        Stack<Character> res=new Stack<Character>();
        StringBuilder sb=new StringBuilder();
        char prev=‘ ‘;
        for(int i=s.length()-1;i>=0;i--)
        {
            if(s.charAt(i)!=‘ ‘)
            {
                res.push(s.charAt(i));
               
            }
            else
            {
                while(!res.isEmpty())
                {
                    sb.append(res.pop());
                     prev=0;
                }
                if(prev!=‘ ‘&&i!=0)
                {
                sb.append(" ");
                }
                prev=‘ ‘;
            }
        }
        while(!res.isEmpty())
        {
            sb.append(res.pop());
        }
        if(sb.length()>0&&sb.charAt(sb.length()-1)==‘ ‘)
        {
            sb.deleteCharAt(sb.length()-1);
        }
        return sb.toString();
    }
}

 Solution2:

其他用function的之后做吧,会省事很多。这道破题估计也不会再遇上了。

151. Reverse Words in a String

标签:

原文地址:http://www.cnblogs.com/Machelsky/p/5859145.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!