Я работаю над решением этого вопроса на 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;
}