Я увеличиваю скользящее окно слишком далеко? - PullRequest
0 голосов
/ 28 октября 2019

Я работаю над решением этого вопроса на LeetCode , который находит самую длинную подстроку в данной строке без повторяющихся символов. Мое решение работает для некоторых строк (например, «pwwkew»), но не для других (например, «ckilbkd»). Есть предложения?

public int LengthOfLongestSubstring(string s) {
    if (s.Length < 2) return s.Length;

    HashSet<char> existing = new HashSet<char>();
    Stack<string> vals = new Stack<string>();

    int start = 0;
    int end = 1;
    int result = 1;
    existing.Add(s[0]);

    while (end < s.Length && start < end)
    {
        if (!existing.Contains(s[end]))
        {
            if (end == (s.Length - 1))
            {
                result = s.Length - start;
                Console.WriteLine("here");
                break;
            }

            existing.Add(s[end]);
            end++;
        }
        else
        {
            var res = s.Substring(start, end - start);

            if (vals.Count == 0)
            {
                vals.Push(res);
                result = res.Length;
            }
            else if (res.Length > vals.Peek().Length)
            {
                vals.Pop();
                vals.Push(res);
                result = res.Length;
            }

            if (s[end] == s[end - 1])
            {
                start = end;
                end++;
            }
            else
                start++;
        }
    }

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