C#算法怎么实现无重复字符的最长子串
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章主要介绍"C#算法怎么实现无重复字符的最长子串",在日常操作中,相信很多人在C#算法怎么实现无重复字符的最长子串问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C
千家信息网最后更新 2025年01月19日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
代码格式模板
public class Solution { public int LengthOfLongestSubstring(string s) { }}
笔者的代码仅供参考
使用最笨的方式,200ms左右
public class Solution { public int LengthOfLongestSubstring(string s) { if (s == null || s == "") return 0; char[] a = s.ToCharArray(); //字符串转为字符数组 int start = 0; //区间开始位置 int stop = 0; //区间结束位置 int newMax = 1; //当前区间数 int max = 1; //区间最大个数 for (stop = 1; stop < a.Length; stop++) //每次向后移动一位 { bool b = false; //是否存在重复 for (int i = start; i < stop; i++) //检查当前元素在区间是否有相同值 { if (a[stop] == a[i]) //如果stop+1位在区间找到相同的字符 { char ls = 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; return max; }}
完整测试代码(控制台)
using System;namespace ConsoleApp1{ public class Testa { public int LengthOfLongestSubstring(string s) { if (s == null || s == "") return 0; char[] a = s.ToCharArray(); //字符串转为字符数组 int start = 0; //区间开始位置 int stop = 0; //区间结束位置 int newMax = 1; //当前区间数 int max = 1; //区间最大个数 for (stop = 1; stop < a.Length; stop++) //每次向后移动一位 { bool b = false; //是否存在重复 for (int i = start; i < stop; i++) //检查当前元素在区间是否有相同值 { if (a[stop] == a[i]) //如果stop+1位在区间找到相同的字符 { char ls = a[stop]; if (newMax > max) max = newMax; start = i + 1; //区间开始位置重置 newMax = stop - start + 1; //重新设置区间数 b = true; break; } } if (b == false) ////没有重新设置区间数时加1 newMax += 1; } if (newMax > max) max = newMax; return max; } } class Program { static void Main(string[] args) { Testa t1 = new Testa(); //正确结果 Console.WriteLine(t1.LengthOfLongestSubstring(" ")); //1 Console.WriteLine(t1.LengthOfLongestSubstring("au")); //2 Console.WriteLine(t1.LengthOfLongestSubstring("abcabcbb")); //3 Console.WriteLine(t1.LengthOfLongestSubstring("bbbbb")); //1 Console.WriteLine(t1.LengthOfLongestSubstring("pwwkew")); //3 Console.WriteLine(t1.LengthOfLongestSubstring("aab")); //2 Console.ReadKey(); } }}
使用哈希集合,速度更快,100ms-150ms
public int LengthOfLongestSubstring(string s) { int n = s.Length; HashSetset = new HashSet (); //集合 int ans = 0, start = 0, stop = 0; //ans为字符串长度,starp区间起点,stop区间终点 while (start < n && stop < n) { // try to extend the range [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++]); } } return ans; }
完整控制台测试代码
using System;using System.Collections.Generic;using System.Linq;namespace ConsoleApp2{ public class Solution { public int LengthOfLongestSubstring(string s) { int n = s.Length; HashSetset = new HashSet (); //集合 int ans = 0, start = 0, stop = 0; //ans为字符串长度,starp区间起点,stop区间终点 while (start < n && stop < n) { // try to extend the range [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++]); } } return ans; } } class Program { static void Main(string[] args) { Solution t1 = new Solution(); //正确结果 Console.WriteLine(t1.LengthOfLongestSubstring(" ")); //1 Console.WriteLine(t1.LengthOfLongestSubstring("au")); //2 Console.WriteLine(t1.LengthOfLongestSubstring("abcabcbb")); //3 Console.WriteLine(t1.LengthOfLongestSubstring("bbbbb")); //1 Console.WriteLine(t1.LengthOfLongestSubstring("pwwkew")); //3 Console.WriteLine(t1.LengthOfLongestSubstring("aab")); //2 Console.ReadKey(); } }}
到此,关于"C#算法怎么实现无重复字符的最长子串"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
字符
区间
最长
字符串
长度
位置
算法
C#
代码
学习
输入
示例
结果
测试
解释
输出
最大
个数
控制台
数组
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
学软件开发包薪资包就业
虚拟专用网络技术
串口服务器是变送器吗
保定有云奇迹网络技术
在国外做软件开发的工资
超聚变服务器售后电话
《网络安全实用技术指南》
软件开发质量管理系统
单位网络安全顺口溜
关于网络安全的电视剧
网络技术逮捕逃亡伊朗的逃犯
网络安全学那些东西
数据库查询效率有影响吗
女人网络安全知识漫画
c 拦截串口数据库
服务器品牌有哪些
软件开发保密期几年
时空猎人怎么连接服务器
波场链软件开发
课工场数据库代码
我的世界模组服务器推荐
破解技术难题 数据库
无法建立与服务器的安全连接
企业如何选择实用安全的服务器
服务器怎么看是千兆还是万兆
edr和网络安全的区别
怎么找出数据连接到服务器
e5服务器是处理器吗
福建安卓软件开发多少钱
重庆web前端软件开发价钱