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#算法怎么实现无重复字符的最长子串”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注恰卡编程网网站,小编会继续努力为大家带来更多实用的文章!
推荐阅读
-
polyfills怎么按需加载
polyfills怎么按需加载本篇内容主要讲解“polyfills...
-
C#数据类型怎么实现背包、队列和栈
-
C#怎么实现冒泡排序和插入排序算法
C#怎么实现冒泡排序和插入排序算法这篇文章主要讲解了“C#怎么实现...
-
C#如何实现希尔排序
-
C#如何实现归并排序
-
C#怎么使用符号表实现查找算法
-
C#类的静态成员怎么用
C#类的静态成员怎么用这篇“C#类的静态成员怎么用”文章的知识点大...
-
C#的静态函数怎么用
C#的静态函数怎么用这篇文章主要讲解了“C#的静态函数怎么用”,文...
-
C#中的析构函数怎么用
C#中的析构函数怎么用这篇文章主要讲解了“C#中的析构函数怎么用”...
-
怎么用CZGL.ProcessMetrics监控.NET应用