从给定的字符串输入中,通过具有 2 个指针 i 和 j 使用滑动窗口技术。i 和 j 都指向字符串中的同一个字符。遍历字符串并将其添加到列表中。如果找到重复的字符,则将其从列表中删除,否则将其附加到列表中。
输入 - s = "abcabcbb"
输出 - 3
说明 - 答案是“abc”,长度为 3。
输入 - s = "bbbbb"
输出 - 1
说明 - 答案是“b”,长度为 1。
时间复杂度-O(N)
空间复杂度-O(N)
public class Arrays{ public int LongestSubstringWithNoRepeatingCharacters(string s){ List<char> c = new List<char>(); int iPointer = 0; int jpointer = 0; int max = 0; while (jpointer < s.Length){ if (c.Contains(s[jpointer])){ c.Remove(s[iPointer]); iPointer++; } else{ max = Math.Max(c.Count(), max); c.Add(s[jpointer]); jpointer++; } } return max; } } static void Main(string[] args){ int res = s.LongestSubstringWithNoRepeatingCharacters("abcabcbb"); Console.WriteLine(res); }输出结果
2