码迷,mamicode.com
首页 > 其他好文 > 详细

无重复字符的最长子串

时间:2018-07-15 21:24:40      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:abc   length   bbb   重置   更新   指针   计算   匹配   字符   

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

示例:

给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3。

给定 "bbbbb" ,最长的子串就是 "b" ,长度是1。

给定 "pwwkew" ,最长子串是 "wke" ,长度是3。请注意答案必须是一个子串,"pwke" 是 子序列  而不是子串。

 

老样子看到字母就想到分箱。。但是分箱需要重置零,而且匹配到重复字符时,必须回溯到前一个重复字符。。需要大量的操作浪费很多时间。

看了别人的解后发现只要加一个start指针就好了。。。。

思路就是碰到一个字符,先看一下hash表中它的上一个位置是否在start之后,是的话说明遇到重复字符了,计算出子串的长度,更新maxlen和start指针。或者碰到‘\0’也要计算len,最后更新一下hash表的数据,即该字符的位置。

int lengthOfLongestSubstring(char* s) {
    int a[128]={0};
    int ptr,pos=1,start=1;
    int len,maxlen=0;
    char *p=s;
    do{
        ptr=*p;
        if(a[ptr]>=start||ptr==0)
        {
            len=pos-start;
            if(len>maxlen)
                maxlen=len;
            start=a[ptr]+1;
        }
        a[ptr]=pos++;
    }while(*p++);
    return maxlen;
}

 

无重复字符的最长子串

标签:abc   length   bbb   重置   更新   指针   计算   匹配   字符   

原文地址:https://www.cnblogs.com/onlyandonly/p/9314614.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!