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

csharpserver side programmingprogramming更新于 2025/4/18 8:52:17

从给定的字符串输入中,使用滑动窗口技术,有两个指针 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

相关文章