1. 程式人生 > 資訊 >華為智慧眼鏡官宣 12 月 23 日釋出:可換鏡片設計,搭載鴻蒙 HarmonyOS

華為智慧眼鏡官宣 12 月 23 日釋出:可換鏡片設計,搭載鴻蒙 HarmonyOS

給你一個字串 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()));
        }
    }
}
心之所向,素履以往 生如逆旅,一葦以航