前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >无重复字符的最长子串

无重复字符的最长子串

作者头像
程序员小王
发布2020-07-02 14:41:41
5020
发布2020-07-02 14:41:41
举报
文章被收录于专栏:架构说架构说

一、描述

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

代码语言:javascript
复制
 输入: "abcabcbb"
 输出: 3
 解释: 最长子串是 "abc"

同类:给一个字符串str,找到str中最长的连续子串(不区分大小写),返回其长度。

思考 60秒 。。。

思考 60秒 。。。

二、思路

  • 如何判断一个子串没有重复字符--->遍历过程中 判断[start,i] 没有重复记录 是统计个数做到
  • 如果重复多次,舍去最早出现的。
  • 这就是滑动窗口。

三、代码

代码语言:javascript
复制
 class Solution
 {
 public:
     //看到这个题目 输入: "bbbbb" ,我马上想到map 统计每个字符个数,
     //这里让统计key 可能是任意字符长度子串 "pwwkew" 该怎么办
     //说明key 如果是string 性能可能下降。必须字符作为key。
     // 8 ms
     //测试: aa->1
     int lengthOfLongestSubstring(string s)
     {
         int result = 0;
         vector<int> data(128, -1);
         //ASCII码表里字符总共有128个 ASCII码的大小规则:0~9<A~Z<a~z。,用每个字符作为key,永远不可能越界。
         //如果重复出现。舍去后面字符重新计算。
         int start = 0;
 
         for (int i = 0; i < s.size(); i++)
         {
             char temp = s[i];
             //位置关系 [0 ...start ...i)
             if (data[temp] >= start)
             {
                 //如果有重复部分,移动掉前缀重复,重新开始计算。
                 //移动窗口开始位置。
                 start = data[temp] + 1;
             }
             data[temp] = i;
             //如果不重复,理想情况,移动窗口结束位置。
             result = max(result, i - start + 1);
         }
 
         return result;
     }
 };
代码语言:javascript
复制
 /**
  * @param s: a string
  * @return: an integer
  */
 func lengthOfLongestSubstring (s string) int {
     // write your code here
 
     var result int =0
     var start int  =0
 
     hash:=make([]int,128)//默认初始化为0,这里初始化为-1
     for i:=0;i<128;i++{
         hash[i] =-1
 }
 
     for i:=0;i<len(s);i++{
         //判断是否重复
 
         end:=s[i]
         if(hash[end] >=start) {
             start =hash[end]+1
         }
         hash[end]=i //end-->i
 
         result = max(result,i-start+1)
 }
 
     return result
 
 }
 
 func max(i,j int)int{
     if i>j{
         return i
     }else{
         return j
 }
 }

分享最实用的经验 , 希望每一位来访的朋友都能有所收获!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Offer多多 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、描述
  • 二、思路
  • 三、代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档