Java метод / функция для возврата второй самой короткой строки из списка строк - PullRequest
0 голосов
/ 06 июля 2011

Мне потребовалась помощь относительно Java-программы, чтобы найти вторую строчку из списка строк.

Могу ли я получить предложения по поводу:

  • Как начать?
  • Как использовать для этого итератор?
  • Какой эффективный способ решения этой проблемы?

Ответы [ 5 ]

2 голосов
/ 06 июля 2011

Вы можете использовать Collections.sort с компаратором, который сравнивает две строки на основе их длины.После этого вы можете взять второй элемент из отсортированной коллекции.

Примечание : это не самый эффективный подход, но пока производительность не является проблемой, я бы предложилиспользуйте простейшую вещь, которая могла бы сработать.

В случае, если необходимо учитывать строки одинаковой длины (т.е. вторая самая короткая строка из ["a", "b", "cc"] будет "cc"), тогда вы можете создать хэш-картус длиной строк в качестве ключа и списком строк этой длины в качестве их значения и принимая значение второго наименьшего ключа.

1 голос
/ 06 июля 2011

Поддерживайте две переменные: длину самой короткой и длину второй самой короткой строки. Так пусть они будут first и second.

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.

Вы можете сохранить еще две переменные для фактических строк или просто сохранить их индексы в списке.

0 голосов
/ 06 июля 2011

Я бы сказал:

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!");
0 голосов
/ 06 июля 2011

Грубая идея:

  1. Используйте цикл for для итерации по коллекции
  2. Используйте две локальные переменные (String actualShortestString, actualSecondShortestString, определенные вне цикла), чтобы сохранить самую короткую ивторая самая короткая строка
  3. Math.min(actualString.length(), actualShortestString.length()) поможет помочь.
  4. вторая самая короткая Строка - это предыдущая самая короткая строка

Примечание - вас попросили реализовать алгоритм Select , чтобы найти kth наименьший элемент . Википедия имеет некоторые фоны и алгоритмы для этой задачи.

0 голосов
/ 06 июля 2011

Перебирать список и поддерживать две верхние длины вместе с индексом.

Например:

ab
abc
abcd
a
abcdef
xyz

повторяется и имеет длину вершины = 6 и позицию = 4, также вторая длина вершины = 4, позиция = 3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...