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

从字符串列表中返回第二个最短字符串的Java方法/函数,java,oop,list,collections,Java,Oop,List,Collections,我想得到有关Java程序的帮助,以便从字符串列表中找出第二个最短的字符串 我可以就以下方面提出建议吗 如何开始 如何为此使用迭代器 解决这个问题的有效方法是什么 遍历列表,并将前两个长度与索引一起保持 例如: ab abc abcd a abcdef xyz 迭代并使顶部长度为6,位置为4,第二个顶部长度为4,位置为3。迭代列表并保持前两个长度和索引 例如: ab abc abcd a abcdef xyz 迭代并使顶部长度为6,位置为4,第二个顶部长度为4,位置为3 使用for循环迭代集

我想得到有关Java程序的帮助,以便从字符串列表中找出第二个最短的字符串

我可以就以下方面提出建议吗

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

遍历列表,并将前两个长度与索引一起保持

例如:

ab
abc
abcd
a
abcdef
xyz

迭代并使顶部长度为6,位置为4,第二个顶部长度为4,位置为3。迭代列表并保持前两个长度和索引

例如:

ab
abc
abcd
a
abcdef
xyz
迭代并使顶部长度为6,位置为4,第二个顶部长度为4,位置为3

  • 使用for循环迭代集合
  • 使用两个局部变量(
    String actualShortestString,actualSecondShortestString
    ,在循环外部定义)存储最短字符串和第二短字符串
  • Math.min(actualString.length(),ActualShortString.length())
    将提供帮助
  • 第二个最短字符串是前一个最短字符串

  • 注意-要求您实现一个Select算法来查找第k个最小元素。对该任务有一定的背景和算法。

    大致思路:

  • 使用for循环迭代集合
  • 使用两个局部变量(
    String actualShortestString,actualSecondShortestString
    ,在循环外部定义)存储最短字符串和第二短字符串
  • Math.min(actualString.length(),ActualShortString.length())
    将提供帮助
  • 第二个最短字符串是前一个最短字符串

  • 注意-要求您实现一个Select算法来查找第k个最小元素。具有该任务的一些背景和算法。

    您可以使用比较器根据两个字符串的长度进行比较。之后,您可以从已排序的集合中获取第二个元素

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

    如果需要考虑长度相等的字符串(即
    [“a”、“b”、“cc”]
    中第二短的字符串是
    “cc”
    ),则可以创建一个哈希映射,将字符串的长度作为键,将该长度的字符串列表作为其值,并使用第二小的键的值

    您可以使用比较器根据两个字符串的长度进行比较。之后,您可以从已排序的集合中获取第二个元素

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


    如果需要考虑长度相等的字符串(即
    [“a”、“b”、“cc”]
    中第二短的字符串是
    “cc”
    ),则可以创建一个哈希映射,将字符串的长度作为键,将该长度的字符串列表作为其值,并使用第二小的键的值

    保留两个变量:最短字符串的长度和第二短字符串的长度。因此,让它们成为第一个和第二个

    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;
    
    first=len(列表[0]),second=len(列表[0]);
    对于每个其他元素cur do:
    curLen=len(cur);
    如果(卷曲<第一个):
    第二=第一;
    第一个=卷曲;
    其他的
    如果(卷曲first):
    秒=cur;
    
    这里我假设您希望第二个最短字符串的长度与最短字符串的长度不同。如果您不想这样做,请先删除
    和&curLen>


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

    维护两个变量,即最短字符串的长度和第二短字符串的长度。因此,让它们成为第一个和第二个

    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;
    
    first=len(列表[0]),second=len(列表[0]);
    对于每个其他元素cur do:
    curLen=len(cur);
    如果(卷曲<第一个):
    第二=第一;
    第一个=卷曲;
    其他的
    如果(卷曲first):
    秒=cur;
    
    这里我假设您希望第二个最短字符串的长度与最短字符串的长度不同。如果您不想这样做,请先删除
    和&curLen>

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

    我想说:

    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!");
    
    String[]情书={“玫瑰是红色的,…”,“我想说:

    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!");
    

    String[]loveLetters={“玫瑰是红色的,…”,“我回答得很好,因为A)这确实是最好的方式,B)它对桑迪试图让我们为她做的任何测试都没有帮助。只需提一下,这是最简单的,但不是最有效的。它是
    O(NlogN)
    但任务可以在
    O(N)中完成
    。也可能任务是如果你有
    a
    b
    cc
    ,那么你应该把
    cc
    作为第二个最短路径。那么仅仅选择第二个路径是不够的。你仍然需要循环。@Petar Minchev这是正确的,但是因为没有特别需要以最有效的方式来做,我更喜欢简单的路径方法,而不是更快的方法。我会在答案中提到它。答案很好,因为a)这确实是最好的方法,B)它对sandy试图让我们为她做的任何测试都没有帮助。只是说这是最简单但不是最有效的。它是
    O(NlogN)
    但任务可以在
    O(N)中完成
    。同样,如果你有
    a
    b
    cc
    ,那么你应该把
    cc
    作为第二个最短的。然后只取第二个