无重复字符的最长子串
给定一个字符串,找出不含有重复字符的最长子串的长度。
示例:
给定 "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; }

浙公网安备 33010602011771号