Почему этот код не выполняется должным образом?Самая длинная проблема с подстрокой - PullRequest
0 голосов
/ 03 октября 2018

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

class Solution {
public int lengthOfLongestSubstring(String s) {
    HashSet<Character> hash = new HashSet<>();
    int count = 0, finalCount = 1;
    char prevChar = s.charAt(0);
    hash.add(prevChar);


    for (int i = 1; i < s.length(); i++)
    {
        char character = s.charAt(i);
        if (!hash.contains(character)){
            hash.add(character);
            count++;
            if (count > finalCount) finalCount = count;
        }
        else{
            hash.clear();
            hash.add(character);
            count = 1;
        }
        prevChar = character;
    }
    return finalCount;
} }

enter image description here

Что-то не так?Если нет, как вы думаете, мой алгоритм был эффективным?Я не могу сравнить его эффективность, поскольку веб-страница не позволяет мне загружать его.

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

В соответствии с описанием ошибки выполняется фиктивная сплитка в строке 5 класса Solution.

На основе рисунка:

char prevChar = s.charAt(0);

Ошибка ArrayIndexOutOfBounds, которая обычно указываетВы пытались извлечь из чего-то большего, чем было на самом деле (например, работать над концом массива).

Здесь я бы предложил добавить несколько строк System.out.println в строке 3 для проверки работоспособности.параметр метода, например:

(a), если входная строка s равна нулю

или

(b), если входная строка s пуста (например, "")

charAt (0) получит первый первый символ, но если нулевых символов, то попытка получить 1-й символ - ошибка, нет?

NB: что-тонапример:

 System.out.println("Input was :" + s + ":");

Будут показаны оба этих условия:

Input was ::

для пустой строки

Input was :null:

для пустой строки

0 голосов
/ 03 октября 2018

Вы вызываете s.charAt (0) в строке 5. Я предполагаю, что они передают пустую строку в качестве контрольного примера, и вы получаете исключение за пределами границ.Перед строкой 5 добавьте проверку, чтобы увидеть, равна ли длина строки 0 и возвращает ли она 0.

...