题目 – 返回所有字符串中的第 N 长字符串

题目 – 返回所有字符串中的第 N 长字符串

原文: https://howtodoinjava.com/puzzles/puzzle-return-all-the-strings-with-the-nth-longest-length/

算法:给定一个字符串列表,例如,返回列表中的第 N 个最长长度的字符串:list – Yuri, Ron, Interview, Longest, List, Containnth = 1将返回 只是Interview,而nth = 2将返回LongestContain

虽然“如何在O(n)中长度为 n 的未排序数组中找到第 k 个最大元素”的解决方案可以应用于字符串长度,如何转换回以打印所有长度为 n 的字符串?

解决方案

我编写了一个简单的 Java 程序,该程序可以从字符串列表中找到“所有 N 个最长的元素”。 程序如下:

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] );
    }
}
========Output of program=======

n = 0 => null
n = 1 => [Interview]
n = 2 => [Longest, Contain]
n = 3 => [Yuri, List]
n = 4 => [Ron]

祝您学习愉快!