Given an input string, reverse the string word by word.
For example,
Given s = "the sky is blue
",
return "blue is sky the
".
Clarification:
- What constitutes a word?
A sequence of non-space characters constitutes a word. - Could the input string contain leading or trailing spaces?
Yes. However, your reversed string should not contain leading or trailing spaces. - How about multiple spaces between two words?
Reduce them to a single space in the reversed string.
Java:
重点就是用了spilt("\\s+")操作,然后考虑下边界情况:null," ",""
public class Solution {
public String reverseWords(String s) {
if(s==null) return null;
s=s.trim();
if(s.length()==0) return "";
String[] temp=s.split("\\s+");
StringBuilder sb= new StringBuilder();
int i=temp.length-1;
while(i>=0)
{
sb.append(temp[i]);
if(i!=0) sb.append(" ");
i--;
}
return sb.toString();
}
}
Reference:
http://blog.youkuaiyun.com/linhuanmars/article/details/20982463
第一种没看懂, 第二种:
public class Solution {
public String reverseWords(String s) {
if(s==null) return null;
s=s.trim();
if(s.length()==0) return "";
StringBuilder res= new StringBuilder();
for(int i=s.length()-1;i>=0;i--)
{
if(s.charAt(i)!=s.length()&&s.charAt(i)==' '&&s.charAt(i)==s.charAt(i+1)) continue;
res.append(s.charAt(i));
}
int left=0;
int right=0;
while(right<res.length())
{
while(right<res.length()&&res.charAt(right)!=' ')
{
right++;
}
int next=right+1;
right--;
while(left<right)
{
char temp=res.charAt(left);
res.setCharAt(left++, res.charAt(right));
res.setCharAt(right--,temp);
}
left=next;
right=next;
}
return res.toString();
}
}
第一种递归:
public String reverseWords(String s) {
s = s.trim();
return helper(s,0).toString();
}
private StringBuilder helper(String s, int index)
{
if(index>=s.length())
return new StringBuilder();
StringBuilder cur = new StringBuilder();
int lastIndex = index;
while(index < s.length() && s.charAt(index)!=' ')
{
cur.append(s.charAt(index++));
}
while(index < s.length() && s.charAt(index)==' ')
index++;
if(lastIndex == 0)
return helper(s,index).append(cur);
return helper(s,index).append(cur).append(' ');
}