Java方法/函数,用于从字符串列表中返回第二个最短字符串

时间:2011-07-06 06:24:23

标签: java oop list collections

我希望有关Java程序的帮助,从字符串列表中找出第二个最短的字符串。

我能否提出以下建议:

  • 如何开始?
  • 如何使用迭代器?
  • 解决这个问题的有效方法是什么?

5 个答案:

答案 0 :(得分:2)

您可以将Collections.sort与比较器一起使用,比较两个字符串的长度。之后,您可以从已排序的集合中获取第二个元素。

注意:这不是最有效的方法,但只要性能不是问题,我建议使用最简单的方法。

如果要考虑相等长度的字符串(即["a", "b", "cc"]中的第二个最短字符串将是"cc"),那么您可以创建一个字符串长度为的哈希映射key和该长度的字符串列表作为其值并取第二个最小键的值。

答案 1 :(得分:1)

保持两个变量的最短长度和第二个最短字符串的长度。因此,请将它们设为firstsecond

first = len(list[0]), second = len(list[0]);

for every other element cur do:
   curLen = len(cur);
   if (curLen < first):
      second = first;
      first = curLen;
   else
   if (curLen < second && curLen > first):
      second = cur;

我在这里假设您希望第二个最短的字符串具有与最短字符串不同的长度。如果您不希望删除&& curLen > first

您可以为实际字符串维护另外两个变量,或者只保留列表中的索引。

答案 2 :(得分:0)

遍历列表并保持前两个长度以及索引。

例如:

ab
abc
abcd
a
abcdef
xyz

迭代并且顶部长度= 6且位置= 4,第二个顶部长度= 4,位置= 3

答案 3 :(得分:0)

粗略的想法:

  1. 使用for循环遍历集合
  2. 使用两个局部变量(String actualShortestString, actualSecondShortestString,在循环外定义)来存储最短和第二个最短的字符串
  3. Math.min(actualString.length(), actualShortestString.length()) 帮助。
  4. 第二短字符串是上一个最短字符串

  5. 注意 - 要求您实施选择算法以查找第k个最小元素Wikipedia具有该任务的一些背景和算法。

答案 4 :(得分:0)

我会说:

String[] loveLetters = {"Roses are red, ...", "I<3U", "I don't have time for a poem."};

String[] shortest = {"",""}; //The shortest and the second shortest.

for (int i=0;i<loveLetters.length;i++) {
  if (shortests[0].equals("") || loveLetters[i].length() < shortest[0].length()) {
    shortest[1] = shortest[0];
    shortest[0] = loveLetters[i];
  }
  else if (shortest[1].equals("") || loveLetters[i].length() < shortest[1].length()) {
    shortest[1] = loveLetters[i];
  }
}
System.out.println("What? The second shortest love letter you wrote me was: " + shortest[1] + "!!?! You should write more!");