0.声明
该题目来源于LeetCode
如有侵权,立马删除。
解法不唯一,如有新解法可一同讨论。
1.题目
0003无重复字符的最长子串
给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。
示例 1:
输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: s = “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
输入: s = “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。文章来源:https://www.toymoban.com/news/detail-476710.html
提示:
0 <= s.length <= 5 * 104
s 由英文字母、数字、符号和空格组成文章来源地址https://www.toymoban.com/news/detail-476710.html
2.代码
namespace LeetCode_0003无重复字符的最长子串
{
class Program
{
static void Main(string[] args)
{
string s = "abcabcbb";
LeetCode_LengthLongSub llls = new LeetCode_LengthLongSub();
int i_Max = llls.LengthOfLongestSubstring(s);
Console.WriteLine("i_Max:" + i_Max);
Console.ReadKey();
}
}
class LeetCode_LengthLongSub
{
public int LengthOfLongestSubstring(string s)
{
HashSet<char> hashSet = new HashSet<char>();//哈希集合,记录每个字符是否出现过
int i_Left = 0, i_Right = 0;//定义初始左右指针位置
int i_Length = s.Length;//定义长度
int i_Count = 0;//定义每次指针移动后的当前hashSet长度
int i_Max = 0;//定义最大数值
while (i_Right < i_Length)//若右指针 < 字符串长度
{
if (!hashSet.Contains(s[i_Right]))//若当前元素不包含在哈希集合中
{
hashSet.Add(s[i_Right]);//将该字符添加进集合
i_Right++;//继续右移指针
}
else//若重复,则删除左指针
{
hashSet.Remove(s[i_Left]);
i_Left++;//将左指针右移
}
i_Count = hashSet.Count;//获取当前运算结果后的长度
i_Max = Math.Max(i_Max, i_Count);//取最大值
}
return i_Max;
}
}
}
到了这里,关于LeetCode-C#-0003.无重复字符的最长子串的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!