如何使用 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

更新于:2021 年 8 月 17 日

1000 多次浏览

开启你的 职业生涯

完成课程获得认证

开始学习
广告