首页 > 代码库 > 151. Reverse Words in a String

151. Reverse Words in a String

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