官方解答 · 置頂Java
官方解答|展場標籤排序
官方解答|展場標籤排序
解題思路
先執行「只保留長度至少2的字串,保留重複值」,再用大寫字母數作主鍵,依遞減比較。主鍵同分時依 String.compareTo 遞減。List.sort 使用穩定排序,回傳 0 時保留前處理後順序。
正確性與邊界
排序發生在前處理之後。字母、數字及母音只按題目的 ASCII 範圍計數;空字串首字元鍵為 -1。去重保留第一次,其他前處理則保留重複。
複雜度
設 n 為字串數、L 為最長字串長度。最壞時間 O(n log n · L),額外空間 O(n+L)。
公開範例
輸入 {"words": ["Java"]},依上述步驟得到 ["Java"]。
下方程式可直接取代起始碼;使用 Java 11,入口為 Solution.solve。
CodeSprout 官方解答 · 題意分析、解題步驟與完整參考程式
import java.util.*;
public class Solution {
private static int key(String word) {
int count=0;
for (char c : word.toCharArray()) if (c >= 'A' && c <= 'Z') count++;
return count;
}
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) result.add(word);
}
result.sort((a,b) -> {
int order = Integer.compare(key(b),key(a));
return order != 0 ? order : b.compareTo(a);
});
return result;
}
}
留言討論 0
登入 後就能留言,一起討論不同的寫法。