题目描述:找出一个子串无重复字符,使其长度最大,返回最大长度。
题目链接:Leetcode 3. Longest Substring Without Repeating Characters
这种题刚开始觉得很简单,但是仔细考虑实际就是一个滑动窗口的题目,或者说是一个单调队列的题目吧,记录一个队列,当某个字符再次出现的时候(且队列中有此字符)就不断弹出队头,也就是重复元素的左边元素全部抛弃,然后进队并更新最长长度。
代码如下
import java.util.HashSet;
class Solution {
public int lengthOfLongestSubstring(String s) {
if (s.length() == 0)
return 0;
int ans = 0;
LinkedList<Character> ls = new LinkedList<Character>();
for(int idx=0;idx<s.length();idx++){
while(!ls.isEmpty() && ls.contains(s.charAt(idx)) && ls.getFirst() != s.charAt(idx)){
Character integer = ls.removeFirst();
}
if (!ls.isEmpty() && ls.getFirst() == s.charAt(idx)) {
ls.removeFirst();
}
ls.add(s.charAt(idx));
ans = Math.max(ans, ls.size());
}
return ans;
}
}