💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 题目 – 返回所有字符串中的第 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/) **算法**:给定一个字符串列表,例如,返回列表中的第 N 个最长长度的字符串:`list – Yuri, Ron, Interview, Longest, List, Contain`,`nth = 1`将返回 只是`Interview`,而`nth = 2`将返回`Longest`和`Contain`。 虽然“如何在`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<String> list = new ArrayList<String>(); 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<String> findNthLongestElement(List<String> list, int n) { if(n < 1) { return null; //Handle invalid case } TreeMap<Integer, List<String>> map = new TreeMap<>(); for(String str : list) { Integer length = str.length(); List<String> tempList = map.get(length) != null ? map.get(length) : new ArrayList<String>(); 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] ``` **祝您学习愉快!**