Skip to main content

48 最长不含重复字符的子字符串

牛客

描述

请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。

使用滑动窗口求解。用一个 boolean 数组记录字符是否出现过,右指针不断移动,标记访问过的字符,移动到重复的字符,求出此时的长度,如果超过最大长度,更新最大长度。然后左指针移动,不断消除访问过的元素,知道右指针遇到的重复元素被消除,然后重复。

public int lengthOfLongestSubstring (String s) {
// write code here
if(s==null || s.length()==0) return 0;
int left=0, right=0;
boolean[] b = new boolean[256];
int max=0;
while(right<s.length()){
char c = s.charAt(right);
if(b[c]){
if(right-left>max) max = right-left;
while(s.charAt(left)!=c){
b[s.charAt(left)] = false;
left++;
}
left++;
}
b[c] = true;
right++;
}
if(right-left>max) max = right-left;
return max;
}