[面试常问总结] 6. 无重复字符的最长子串

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

示例 1:

 

 

 

 

 

 

 

 

 思路:

1、遍历字符串,用一个字典dt key来存储每个元素的 , value是数字,用left变量存储子串的左端点,用right变量用来存储子串的右端点。

双指针法, left和right一前一后 , 遇到重复的就重新赋值left , 判断并存储最大长度值和当前的子串

go代码实现:

复制代码
//最长无重复子串长度
//双指针法, left和right一前一后 , 遇到重复的就重新赋值left , 判断并存储最大长度值和当前的子串
//例如:输入 abcdefg  返回 abcdefg 7 ; 输入 abcacefga 返回 cefg 4
func LongestNorepeatSubstringLength(str string)(string,int){
    strRune:=[]rune(str)
    left:=0
    right:=0
    maxNum:=0
    m:=make(map[string]int)
    subStr:=""
    var flag =false
    //循环字符
    for i,item:=range strRune{
        key:=string(item)
        //right是当前索引
        right=i
        //看看有没有出现过
        if _,ok:=m[key];ok{
            //如果有出现过,获取下长度 , right肯定是当前非重复子串的下一个元素了
            num:=right-left
            //比最大值大的就替换
            if num>maxNum{
                subStr=string(strRune[left:right])
                maxNum=num
            }
            //left赋值当前索引
            left=i
            flag=true
        }
        //字符存到map
        m[key]=1
    }
    //如果一次也没重复的,就再算一次
    if !flag{
        maxNum=right-left+1
        subStr=string(strRune[left:right+1])
    }

    return subStr,maxNum
}
复制代码

 

posted @   唯一客服系统开发笔记  阅读(76)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2020-05-18 [Go] golang http下返回json数据
2016-05-18 [javaSE] 类型转换(1加1等于几)
2016-05-18 [javaSE] 变量的传值与传址
2016-05-18 [PHP] Yaf框架的简单安装使用
2016-05-18 [PHP] 链表数据结构(单链表)
点击右上角即可分享
微信分享提示
1
chat with us