LeetCode-C#-0003.无重复字符的最长子串
发布人:shili8
发布时间:2024-01-15 05:09
阅读次数:104
题目描述:
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。
示例:
输入: "abcabcbb"
输出:3解释: 因为无重复字符的最长子串是 "abc",所以其长度为3。
代码示例:
csharppublic class Solution { public int LengthOfLongestSubstring(string s) { int n = s.Length; int ans =0; Dictionarymap = new Dictionary (); for (int j =0, i =0; j < n; j++) { if (map.ContainsKey(s[j])) { i = Math.Max(map[s[j]], i); } ans = Math.Max(ans, j - i +1); map[s[j]] = j +1; } return ans; } }
代码注释:
1. 首先定义一个长度为n的字符串s,以及一个用于存储字符索引的字典map和最长子串长度ans。
2. 使用双指针i和j,j用于遍历字符串s,i用于记录当前不含重复字符的子串的起始位置。
3. 遍历字符串s,如果map中已经存在当前字符s[j],则更新i为map[s[j]]和当前i中的较大值,即将i移动到重复字符的下一个位置。
4. 计算当前不含重复字符的子串长度j-i+1,并更新ans为当前ans和j-i+1的较大值。
5. 更新map中当前字符s[j]的索引为j+1,表示下一个不含重复字符的子串的起始位置。
6. 最终返回ans作为结果。