Тестил на разных строках. Все выводится правильно Что надо валидатору?
public static int lengthOfLongestUniqueSubstring(String s) {
if(s == null || s.length() == 0) return 0;
List<Integer> set = new ArrayList<>();
Set<Character> tempSet = new HashSet<>();
int previousSize = 0;
lbl:
for(int i = 0; i < s.length()-1; i++) {
tempSet.add(s.charAt(i));
for(int j = i+1; j < s.length(); j++) {
previousSize = tempSet.size();
tempSet.add(s.charAt(j));
if(tempSet.size() == previousSize) {
set.add(s.substring(i, j).length());
tempSet.clear();
break;
}
if(j == s.length()-1) {
set.add(s.substring(i).length());
break lbl;
}
}
}
Collections.sort(set);
return set.get(set.size()-1);
}
package com.javarush.task.task39.task3901;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
/*
Уникальные подстроки
*/
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Please input your string: ");
String s = bufferedReader.readLine();
System.out.println("The longest unique substring length is: \n" + lengthOfLongestUniqueSubstring(s));
}
public static int lengthOfLongestUniqueSubstring(String s) {
if(s == null || s.length() == 0) return 0;
List<Integer> set = new ArrayList<>();
Set<Character> tempSet = new HashSet<>();
int previousSize = 0;
lbl:
for(int i = 0; i < s.length()-1; i++) {
tempSet.add(s.charAt(i));
for(int j = i+1; j < s.length(); j++) {
previousSize = tempSet.size();
tempSet.add(s.charAt(j));
if(tempSet.size() == previousSize) {
set.add(s.substring(i, j).length());
tempSet.clear();
break;
}
if(j == s.length()-1) {
set.add(s.substring(i).length());
break lbl;
}
}
}
Collections.sort(set);
return set.get(set.size()-1);
}
}