# 拼图 – 返回所有字符串的第 N 个最长长度 > 原文: [https://howtodoinjava.com/puzzles/puzzle-return-all-the-strings-with-the-nth-longest-length/](https://howtodoinjava.com/puzzles/puzzle-return-all-the-strings-with-the-nth-longest-length/) **算法:**给定一个字符串列表,例如,返回列表中第**个最长长度**的所有字符串:`list – Yuri, Ron, Interview, Longest, List, Contain`和 **nth = 1** 将返回 只是“ **采访**”,而 **nth = 2** 将返回“ **最长**”和“ **包含**”。 虽然是“如何在 O(n)中长度为 n 的未排序数组中找到第 k 个最大元素”的解决方案? 可以应用于字符串长度,如何转换回以打印所有 n 长度的字符串? ## 解 我编写了一个简单的 Java 程序,该程序可以从字符串列表中找到“所有 N 个最长的元素”。 程序如下: ```java package com.howtodoinjava.examples; import java.util.ArrayList; import java.util.List; import java.util.TreeMap; public class NthLogestStringAlgorithm { public static void main(String[] args) { int n = 0; List list = new ArrayList(); list.add("Yuri"); list.add("Ron"); list.add("Interview"); list.add("Longest"); list.add("List"); list.add("Contain"); System.out.println( findNthLongestElement(list, n) ); } private static List findNthLongestElement(List list, int n) { if(n < 1) { return null; //Handle invalid case } TreeMap> map = new TreeMap<>(); for(String str : list) { Integer length = str.length(); List tempList = map.get(length) != null ? map.get(length) : new ArrayList(); tempList.add(str); map.put(length, tempList); } return map.get( map.descendingKeySet().toArray()[n-1] ); } } ``` ```java ========Output of program======= n = 0 => null n = 1 => [Interview] n = 2 => [Longest, Contain] n = 3 => [Yuri, List] n = 4 => [Ron] ``` **祝您学习愉快!**