欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LeeCode_3.无重复字符的最长子串

程序员文章站 2022-07-12 12:15:40
...
  1. 无重复字符的最长子串难度中等3297给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。

示例 2:

输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。

示例 3:

输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。


双指针蜗牛算法

public class Solution 
{
    public int LengthOfLongestSubstring(string s) 
    {
        if(s.Length==0) return 0;
        int size = 0;
        for(int i=0;i<s.Length;i++)
        {
            string max = s.Substring(i,1);
            int TempSize = 1;
            for(int j=i+1;j<s.Length;j++)
            {
                string p = s.Substring(j,1);
                if(max.Contains(p)) break;
                max = max + p;
                TempSize++;
            }
            if(TempSize>=size) size=TempSize;
        }
        return size;
    }
}

LeeCode_3.无重复字符的最长子串

滑动窗口

利用HashSet

public class Solution 
{
    public int LengthOfLongestSubstring(string s)
    {
        int n = s.Length;
        HashSet<char> set = new HashSet<char>();
        int result = 0;
        int i = 0;
        int j = 0;
        while (i < n && j < n)
        {
            if (set.Contains(s[j]))
            {
                set.Remove(s[i]);
                i++;
            }
            else
            {
                set.Add(s[j]);
                j++;
                result = Math.Max(result, j - i);
            }
        }
        return result;
    }
}

LeeCode_3.无重复字符的最长子串

利用字符表

public class Solution 
{
    public int LengthOfLongestSubstring(string s) 
    {
        int max = 0;
        int[] charTable = new int[256];
        int left = 0;
        for (int i = 0; i < s.Length; ++i)
        {
            if (charTable[s[i]] > left)
            {
                if (i - left > max) max = i - left;
                left = charTable[s[i]];
            }
            charTable[s[i]] = i + 1;
        }
        if (s.Length - left > max) max = s.Length - left;
        return max;
    }
}

LeeCode_3.无重复字符的最长子串