CodeSprout程式萌芽
中等第 412 題 · 展場標籤排序
CodeSprout 官方2026/10/04 00:19
官方解答 · 置頂Java

官方解答|展場標籤排序

官方解答|展場標籤排序

解題思路

先執行「只保留長度為奇數的字串,保留重複值」,再用長度作主鍵,依遞增比較。主鍵同分時依 String.compareTo 遞減。List.sort 使用穩定排序,回傳 0 時保留前處理後順序。

正確性與邊界

排序發生在前處理之後。字母、數字及母音只按題目的 ASCII 範圍計數;空字串首字元鍵為 -1。去重保留第一次,其他前處理則保留重複。

複雜度

設 n 為字串數、L 為最長字串長度。最壞時間 O(n log n · L),額外空間 O(n+L)。

公開範例

輸入 {"words": ["Java"]},依上述步驟得到 []。

下方程式可直接取代起始碼;使用 Java 11,入口為 Solution.solve。

CodeSprout 官方解答 · 題意分析、解題步驟與完整參考程式

import java.util.*;

public class Solution {
    private static int key(String word) {
        return word.length();
    }

    public static List<String> solve(String[] words) {
        List<String> result = new ArrayList<>();
        Set<String> seen = new HashSet<>();
        for (String word : words) {
            if (word.length()%2 != 0) result.add(word);
        }
        result.sort((a,b) -> {
            int order = Integer.compare(key(a),key(b));
            return order != 0 ? order : b.compareTo(a);
        });
        return result;
    }
}

留言討論 0