151. 翻转字符串里的单词

给你一个字符串 s ,逐个翻转字符串中的所有 单词 。

单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。

请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串。

说明:

输入字符串 s 可以在前面、后面或者单词间包含多余的空格。
翻转后单词间应当仅用一个空格分隔。
翻转后的字符串中不应包含额外的空格。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-words-in-a-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

import java.util.Scanner;

class Solution {

    private void swap(StringBuilder sb, int a, int b) {
        char t = sb.charAt(a);
        sb.setCharAt(a, sb.charAt(b));
        sb.setCharAt(b, t);
    }

    private void reverse(StringBuilder sb, int start, int end) {
        while (start < end) {
            swap(sb, start++, end--);
        }
    }

    public String reverseWords(String s) {
        StringBuilder sb = new StringBuilder();
        for (int i = s.length() - 1; i >= 0; --i) {
            if (s.charAt(i) != ' ') {
                sb.append(s.charAt(i));
            } else if (sb.length() != 0 && sb.charAt(sb.length() - 1) != ' ') {
                sb.append(" ");
            }
        }
        if (sb.charAt(sb.length() - 1) == ' ') {
            sb.deleteCharAt(sb.length() - 1);
        }
        int left = 0;
        for (int i = 1; i < sb.length(); ++i) {
            if (sb.charAt(i) == ' ') {
                reverse(sb, left, i - 1);
                left = i + 1;
            }
        }
        reverse(sb, left, sb.length() - 1);
        return sb.toString();
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            System.out.println(new Solution().reverseWords(in.nextLine()));
        }
    }
}
上一篇:Doxygen-PHP特性


下一篇:vscode setting collection/vscode设置搜集