Если вы открыты к немного другому подходу, есть довольно простой способ сделать это с помощью регулярных выражений и потоков.Мы можем попытаться разбить входную строку на компоненты подстроки с одинаковыми буквами, используя следующее регулярное выражение:
(?<=(.))(?!\\1)
Затем мы можем использовать Collections.max
, чтобы найти самую большую строку в коллекции, и, наконец, использовать String#indexOf
чтобы найти индекс этой подстроки.
String str = "aaaabbddddddddddddddddddddaaccde";
List<String> parts = Arrays.asList(str.split("(?<=(.))(?!\\1)"));
String max = Collections.max(parts, Comparator.comparing(s -> s.length()));
System.out.println("largest substring: " + max);
int index = str.indexOf(max);
System.out.println("index of largest substring: " + index);
largest substring: dddddddddddddddddddd
index of largest substring: 6