给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其
长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b"
,所以其长度为 1。
示例 3:
输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是"wke"
,所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke"
是一个子序列,不是子串。
尺取法。维护两个指针。右指针向右移动并标记所经过的字符,直到当前字符被标记过。更新maxx。左指针向右
移动到右指针指向的字符上一次出现的位置,并将这个字符以及经过的字符删除标记。
int lengthOfLongestSubstring(char * s){
bool vis[300];
memset(vis,0,sizeof vis);
int maxx=0;
int head=0,tail=0;
while(head<=tail)
{
while(s[tail] && !vis[s[tail]])
{
vis[s[tail++]]=1;
}
maxx=fmax(maxx,tail-head);
if(s[tail]==0) break;
for(head;s[head]!=s[tail];head++)
vis[s[head]]=0;
vis[s[head++]]=0;
}
return maxx;
}