Собссн банальный цикл и сравнение значения с предыдущем вполне спасёт:
ArrayList<String> Str = new ArrayList<String>();
Str.add("Jim Bob");
Str.add("Bobby Jones");
Str.add("Rob Stiles");
int largestString = Str.get(0).length();
int index = 0;
for(int i = 0; i < Str.size(); i++) {
if(Str.get(i).length() > largestString) {
largestString = Str.get(i).length();
index = i;
}
}
System.out.println("Index " + index + " "+ Str.get(index) + " " + "is the largest and is size " + largestString);
Вариант с Java8 (использовать java.util.Collections.max
)
String max = Collections.max(StrList, Comparator.comparing(s -> s.length()));
Еще вариант с Collections, но до Java8
String max = Collections.max(Str, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.length() - o2.length();
}
});
System.out.println(max);
Collections.max
– принимает на вход коллекцию (в данном случае строк) и компаратор, в котором должна быть описана логика сравнения элементов коллекции.
It’s real simple using java 8 (just check that your array is not empty first or process the .get()
specially):
List<String> strings = Arrays.asList(animals);
String longest = strings.stream().
max(Comparator.comparingInt(String::length)).get();
int max = longest.length();
OR, if you just need the length:
int max = strings.stream().map(String::length).max(Integer::compareTo).get();
Or, if you prefer a one-liner, it’s:
String longest = Arrays.asList(animals)
.strings.stream().max(Comparator.comparingInt(String::length)).get();
=AND=
int max = Arrays.asList(animals)
.stream().map(String::length).max(Integer::compareTo).get();
Well, okay.. it’s actually two-liner 🙂 Enjoy!
UPDATE:
Instead of Arrays.asList(animals).strings.stream()
one could use directly Stream.of(animals)
Помогите, пожалуйста
Помогите пожалуйста, как рещить задачу, объяснив, что нужно пошагово делать
package com.javarush.task.task07.task0708;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
/*
Самая длинная строка
*/
public class Solution {
private static ArrayList<String> strings = new ArrayList<>();
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
for (int i = 0; i < 5; i++)
{
String s = reader.readLine();
strings.add(s);
}
for (int i = 0; i <= strings.length; i++ ){
if (strings.get(i).length() > strings.get(i + 1).length()) {
System.out.println(strings.get(i).length);
}
}
}
}
Этот веб-сайт использует данные cookie, чтобы настроить персонально под вас работу сервиса. Используя веб-сайт, вы даете согласие на применение данных cookie. Больше подробностей — в нашем Пользовательском соглашении.
Finding a longest String. Нахождение самой длинной строки [Java]
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.javarush.task.task07.task0708; | |
import java.io.*; | |
import java.util.ArrayList; | |
/* | |
Самая длинная строка | |
*/ | |
public class LongestString { | |
public static void main(String[] args) throws Exception { | |
ArrayList < String > al = new ArrayList<>(); | |
BufferedReader r = new BufferedReader(new InputStreamReader(System.in)); | |
for (int i = 0; i < 5; i++) | |
al.add(r.readLine());//creating the list | |
int longest = al.get(i).length();}} | |
for (int j = 0; j < 5; j++) {//сразу вывод | |
if(al.get(j).length() == longest) | |
System.out.println(al.get(j)); | |
} | |
} | |
} | |
/*Самая длинная строка | |
1. Создай список строк. | |
2. Считай с клавиатуры 5 строк и добавь в список. | |
3. Используя цикл, найди самую длинную строку в списке. | |
4. Выведи найденную строку на экран. | |
5. Если таких строк несколько, выведи каждую с новой строки. | |
Требования: | |
1. Объяви переменную типа ArrayList (список строк) и сразу проинициализируй ee. | |
2. Программа должна считывать 5 строк с клавиатуры и записывать их в список. | |
3. Программа должна выводить самую длинную строку на экран. | |
4. Если есть несколько строк с длиной равной максимальной, то нужно вывести каждую из них с новой строки.*/ |
Найти самую длинную подстроку без повторяющихся символов
1. обзор
В этом руководстве сравниваются способы поиска самой длинной подстроки уникальных букв с использованием Java. Например, самая длинная подстрока уникальных букв в «CODINGISAWESOME» – это «NGISAWE».
2. Метод грубой силы
Начнем с наивного подхода. Начнем сwe can examine each substring whether it contains unique characters:
String getUniqueCharacterSubstringBruteForce(String input) {
String output = "";
for (int start = 0; start < input.length(); start++) {
Set visited = new HashSet<>();
int end = start;
for (; end < input.length(); end++) {
char currChar = input.charAt(end);
if (visited.contains(currChar)) {
break;
} else {
visited.add(currChar);
}
}
if (output.length() < end - start + 1) {
output = input.substring(start, end);
}
}
return output;
}
Поскольку возможных подстрокn*(n+1)/2,the time complexity of this approach is O(n^2).
3. Оптимизированный подход
Теперь давайте посмотрим на оптимизированный подход. Мы начинаем обход строки слева направо и отслеживаем:
-
текущая подстрока с неповторяющимися символами с помощью индексаstart иend
-
самая длинная неповторяющаяся подстрокаoutput
-
таблица поиска уже символовvisited
String getUniqueCharacterSubstring(String input) {
Map visited = new HashMap<>();
String output = "";
for (int start = 0, end = 0; end < input.length(); end++) {
char currChar = input.charAt(end);
if (visited.containsKey(currChar)) {
start = Math.max(visited.get(currChar)+1, start);
}
if (output.length() < end - start + 1) {
output = input.substring(start, end + 1);
}
visited.put(currChar, end);
}
return output;
}
Для каждого нового персонажа мы ищем его в уже посещенных персонажах. Если символ уже был посещен и является частью текущей подстроки с неповторяющимися символами, мы обновляем стартовый индекс. В противном случае мы продолжим обход строки.
Поскольку мы обходим строку только один раз,the time complexity will be linear, or O(n).
4. тестирование
Наконец, давайте тщательно протестируем нашу реализацию, чтобы убедиться, что она работает:
@Test
void givenString_whenGetUniqueCharacterSubstringCalled_thenResultFoundAsExpected() {
assertEquals("", getUniqueCharacterSubstring(""));
assertEquals("A", getUniqueCharacterSubstring("A"));
assertEquals("ABCDEF", getUniqueCharacterSubstring("AABCDEF"));
assertEquals("ABCDEF", getUniqueCharacterSubstring("ABCDEFF"));
assertEquals("NGISAWE", getUniqueCharacterSubstring("CODINGISAWESOME"));
assertEquals("be coding", getUniqueCharacterSubstring("always be coding"));
}
Здесь мы пробуем иtest boundary conditions as well as the more typical use cases.
5. Заключение
В этом руководстве мы узнали, как использовать технику скользящего окна, чтобы найти самую длинную подстроку с неповторяющимися символами.