问题来源:https://oj.leetcode.com/problems/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
".
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. - 我的实现代码:(开始看错了题目要求,以为就是一个字符串反转,直接用了new StringBuffer(s).reverse().toString(),后来发现不是一个简单的所有字符反转,而是单词顺序反转,但是单词还是那个单词!)
- public class Solution {
- public String reverseWords(String s) {
- int length = s.length();
- StringBuffer buff = new StringBuffer();
- StringBuffer sb = new StringBuffer();
- for (int i = length; i > 0; i--) {
- if (s.charAt(i - 1) == ' ') {
- buff.append(sb.reverse().toString());
- sb = new StringBuffer();
- buff.append(' ');
- while (i-1 > 0) {
- if (s.charAt(i - 2) == ' ') {
- i--;
- } else
- break;
- }
- } else {
- sb.append(s.charAt(i-1));
- }
- }
- buff.append(sb.reverse().toString());
- return buff.toString().trim();
- }
- public static void main(String[] args) {
- Scanner scan = new Scanner(System.in);
- String s = scan.nextLine();
- System.out.println(new Solution().reverseWords(s));
- }
- }