如何从给定的字符串中找到最长子字符串的长度而不使用 C# 重复字符?

从给定的字符串输入中,通过具有 2 个指针 i 和 j 使用滑动窗口技术。i 和 j 都指向字符串中的同一个字符。遍历字符串并将其添加到列表中。如果找到重复的字符,则将其从列表中删除,否则将其附加到列表中。

示例 1

输入 - s = "abcabcbb"

输出 - 3

说明 - 答案是“abc”,长度为 3。

示例 2

输入 - 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

猜你喜欢