标签: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