C#算法怎么实现无重复字符的最长子串

C#算法怎么实现无重复字符的最长子串

这篇文章主要介绍“C#算法怎么实现无重复字符的最长子串”,在日常操作中,相信很多人在C#算法怎么实现无重复字符的最长子串问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#算法怎么实现无重复字符的最长子串”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

题目

给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。

C#算法怎么实现无重复字符的最长子串

示例 1:

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

示例 2:

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

示例 3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。

要注意字符串为空、变量为null、字符串长度 Length = 1 等情况。

测试实例

输入"""au""abcabcbb""bbbbb""pwwkew""aab"预期结果分别是1,2,3,1,3,2

代码格式模板

publicclassSolution{publicintLengthOfLongestSubstring(strings){}}

笔者的代码仅供参考

使用最笨的方式,200ms左右

publicclassSolution{publicintLengthOfLongestSubstring(strings){if(s==null||s=="")return0;char[]a=s.ToCharArray();//字符串转为字符数组intstart=0;//区间开始位置intstop=0;//区间结束位置intnewMax=1;//当前区间数intmax=1;//区间最大个数for(stop=1;stop<a.Length;stop++)//每次向后移动一位{boolb=false;//是否存在重复for(inti=start;i<stop;i++)//检查当前元素在区间是否有相同值{if(a[stop]==a[i])//如果stop+1位在区间找到相同的字符{charls=a[stop];if(newMax>max)max=newMax;start=i+1;//区间开始位置重置newMax=stop-start+1;b=true;break;}}if(b==false)newMax+=1;}if(newMax>max)max=newMax;returnmax;}}

完整测试代码(控制台)

usingSystem;namespaceConsoleApp1{publicclassTesta{publicintLengthOfLongestSubstring(strings){if(s==null||s=="")return0;char[]a=s.ToCharArray();//字符串转为字符数组intstart=0;//区间开始位置intstop=0;//区间结束位置intnewMax=1;//当前区间数intmax=1;//区间最大个数for(stop=1;stop<a.Length;stop++)//每次向后移动一位{boolb=false;//是否存在重复for(inti=start;i<stop;i++)//检查当前元素在区间是否有相同值{if(a[stop]==a[i])//如果stop+1位在区间找到相同的字符{charls=a[stop];if(newMax>max)max=newMax;start=i+1;//区间开始位置重置newMax=stop-start+1;//重新设置区间数b=true;break;}}if(b==false)////没有重新设置区间数时加1newMax+=1;}if(newMax>max)max=newMax;returnmax;}}classProgram{staticvoidMain(string[]args){Testat1=newTesta();//正确结果Console.WriteLine(t1.LengthOfLongestSubstring(""));//1Console.WriteLine(t1.LengthOfLongestSubstring("au"));//2Console.WriteLine(t1.LengthOfLongestSubstring("abcabcbb"));//3Console.WriteLine(t1.LengthOfLongestSubstring("bbbbb"));//1Console.WriteLine(t1.LengthOfLongestSubstring("pwwkew"));//3Console.WriteLine(t1.LengthOfLongestSubstring("aab"));//2Console.ReadKey();}}}

使用哈希集合,速度更快,100ms-150ms

publicintLengthOfLongestSubstring(strings){intn=s.Length;HashSet<char>set=newHashSet<char>();//集合intans=0,start=0,stop=0;//ans为字符串长度,starp区间起点,stop区间终点while(start<n&&stop<n){//trytoextendtherange[i,j]if(!set.Contains(s[stop])){set.Add(s[stop++]);ans=Math.Max(ans,stop-start);//或者ans=ans>(stop-start)?ans:(stop-start)}else{set.Remove(s[start++]);}}returnans;}

完整控制台测试代码

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;namespaceConsoleApp2{publicclassSolution{publicintLengthOfLongestSubstring(strings){intn=s.Length;HashSet<char>set=newHashSet<char>();//集合intans=0,start=0,stop=0;//ans为字符串长度,starp区间起点,stop区间终点while(start<n&&stop<n){//trytoextendtherange[i,j]if(!set.Contains(s[stop])){set.Add(s[stop++]);ans=Math.Max(ans,stop-start);//或者ans=ans>(stop-start)?ans:(stop-start)}else{set.Remove(s[start++]);}}returnans;}}classProgram{staticvoidMain(string[]args){Solutiont1=newSolution();//正确结果Console.WriteLine(t1.LengthOfLongestSubstring(""));//1Console.WriteLine(t1.LengthOfLongestSubstring("au"));//2Console.WriteLine(t1.LengthOfLongestSubstring("abcabcbb"));//3Console.WriteLine(t1.LengthOfLongestSubstring("bbbbb"));//1Console.WriteLine(t1.LengthOfLongestSubstring("pwwkew"));//3Console.WriteLine(t1.LengthOfLongestSubstring("aab"));//2Console.ReadKey();}}}

到此,关于“C#算法怎么实现无重复字符的最长子串”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注恰卡编程网网站,小编会继续努力为大家带来更多实用的文章!

发布于 2022-01-14 22:34:58
收藏
分享
海报
0 条评论
39
上一篇:Android冷启动耗时优化的方法是什么 下一篇:如何使用python实现二叉排序树
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码