四、無重複字符的最長子串

給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。數組

示例 1:spa

輸入: "abcabcbb"
輸出: 3
解釋: 由於無重複字符的最長子串是 長度爲 3。

示例 2:"abc",因此其
輸入: "bbbbb"
輸出: 1
解釋: 由於無重複字符的最長子串是 ,因此其長度爲 1。
"b"

示例 3:code

輸入: "pwwkew"
輸出: 3
解釋: 由於無重複字符的最長子串是 ,因此其長度爲 3。
     請注意,你的答案必須是 子串 的長度, 是一個子序列,不是子串。"wke""pwke"
 class Program
    {
        static void Main(string[] args)
        {
           var t=  ComputeString.ComputeM("bacdcab");

            Console.WriteLine(t);
            Console.ReadKey();
        }
    }




    class ComputeString
    {
        public static int ComputeM(string str)
        {
            int len = str.Length;

            HashSet<char> set = new HashSet<char>();

            int ans=0, start = 0, end = 0;

            while (start < len && end < len)
            {
                if (!set.Contains(str[end]))
                {
                    set.Add(str[end++]);
                    ans = Math.Max(ans, end - start);
                }
                else
                {
                    set.Remove(str[start++]);
                }
            }

            return ans;
        }

        public static int LengthOfLongestSubstring(string s)
        {
            //字符串轉化爲char[]數組
            var array = s.ToCharArray();
            int n = array.Length, ans = 0;
            Dictionary<char, int> map = new Dictionary<char, int>();

            for (int j = 0, i = 0; j < n; j++)
            {
                if (map.ContainsKey(array[j]))
                {
                    //map[array[j]]
                    //i(賦值號兩邊)
                    i = Math.Max(map[array[j]], i);
                }
                ans = Math.Max(ans, j - i + 1);
                map[array[j]] = j + 1;
            }
            return ans;
        }
    }
相關文章
相關標籤/搜索