48-最长不含重复字符的子字符串
小于 1 分钟
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
我们可以遍历这个字符串,使用一个队列保存子串,假如遇到重复的字符,就从队列中删除队头元素,直到队列中没有该重复字符。
这里通过队列可以保持子串的结构。
public int lengthOfLongestSubstring(String s) {
if (s == null || s.length() == 0) {
return 0;
}
char[] chs = s.toCharArray();
int max = 0;
int j = 0;
LinkedList<Character> set = new LinkedList<>();
while (j < chs.length) {
if (set.contains(chs[j])) {
set.removeFirst();
}else{
set.add(chs[j]);
j++;
}
if (set.size() > max) {
max = set.size();
}
}
return max;
}