题目 – 返回所有字符串中的第 N 长字符串
题目 – 返回所有字符串中的第 N 长字符串
算法:给定一个字符串列表,例如,返回列表中的第 N 个最长长度的字符串:list – Yuri, Ron, Interview, Longest, List, Contain
,nth = 1
将返回 只是Interview
,而nth = 2
将返回Longest
和Contain
。
虽然“如何在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]
评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果