标签:
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