Given an input string, reverse the string word by word.
For example,
Given s = "
return "
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.
Solution:
We implement it as a state-machine with two states
where in the transition we add the word or mark the beginning.
public class Solution { public String reverseWords(String s) { StringBuilder solution = new StringBuilder(); int startOfWord = 0; boolean inWord = false; for(int i=0; i<s.length(); i++) { if(s.charAt(i)==' ' || s.charAt(i)=='\t') { if (inWord) { solution.insert(0,s.substring(startOfWord,i)); solution.insert(0,' '); inWord = false; } } else { if (!inWord) { inWord=true; startOfWord = i; } } } if (inWord) { solution.insert(0,s.substring(startOfWord,s.length())); solution.insert(0,' '); } if (solution.length()>0) solution.deleteCharAt(0); return solution.toString(); } }
No comments :
Post a Comment