首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 字符數組單詞級逆序算法:原地反轉、單詞邊界識別與完整代碼實現

     編輯:Java 相關知識

將字符串按單詞逆序(如 "How old are you" → "you are old How")是經典面試題。本文提供原地操作 char[]、雙階段反轉算法:先整體反轉,再逐個單詞反轉,時間 O(n)、空間 O(1),附完整 Java 代碼與邊界處理細節。

算法核心思想

  1. 整體反轉: "How old are you" → "uoy era dlo woH"。
  2. 單詞反轉: 識別連續字母/' 組成的單詞區間,逐個反轉 → "you are old How"。

完整實現代碼

public static void reverseWords(char[] chars) {
    // 1. 整體反轉
    reverseChars(chars, 0, chars.length - 1);

    // 2. 單詞級反轉
    int begin = -1, end = 0;
    for (int i = 0; i < chars.length; i++) {
        char c = chars[i];
        boolean isLetter = (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '\'';
        if (isLetter) {
            if (begin == -1) begin = i;
            end = i;
            if (i == chars.length - 1) reverseChars(chars, begin, end); // 末尾單詞
        } else {
            if (begin != -1) {
                reverseChars(chars, begin, end);
                begin = -1; end = 0;
            }
        }
    }
}

private static void reverseChars(char[] chars, int begin, int end) {
    while (end > begin) {
        char tmp = chars[begin];
        chars[begin++] = chars[end];
        chars[end--] = tmp;
    }
}

測試用例與輸出

char[] chars = "How old are you !? I don't understand".toCharArray();
System.out.println("the first: " + new String(chars));
reverseWords(chars);
System.out.println("the second: " + new String(chars));
輸出:
the first: How old are you !? I don't understand
the second: understand don't I !? you are old How

關鍵細節

  • 單詞定義:僅包含字母與撇號 ',標點/空格作為分隔符。
  • 末尾單詞無分隔符觸發,需在循環結束處額外反轉一次。
  • 原地操作無額外數組分配,適合嵌入式/大數據流式處理場景。

掌握雙反轉技巧,可輕鬆應對「句子逆序」、「旋轉數組」、「回文判斷」等變體題目。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved