当前位置:实例文章 » C#开发实例» [文章]LeetCode-C#-0003.无重复字符的最长子串

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;
 Dictionary map = 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作为结果。

其他信息

其他资源

Top