leetcode题目3:无重复字符的最长子串(java)
2020-05-10 本文已影响0人
castlet
题目描述
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度
示例
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
解题思路
- 定义一个队列,
- 对字符串里的字符进行遍历,先判断队列里是否存在相同字符,如果存在相同的字符,则移除队列的元素,直到队列中不存在相同的字符后,再将当前字符入队。
- 队列的最大长度即为无重复最长子串的长度。
代码
public int lengthOfLongestSubstring(String s) {
if (s == null || s.length() == 0) {
return 0;
}
Queue<Character> queue = new LinkedList<>(); // 定义队列
int maxSubStringLength = 0;
for (int i = 0; i < s.length(); i++) {
while (queue.contains(s.charAt(i))) {
// 队列中存在相同字符,则出队,直到没有相同字符为止。
queue.poll();
}
// 入队
queue.offer(s.charAt(i));
if (queue.size() > maxSubStringLength) {
// 更新最大值
maxSubStringLength = queue.size();
}
}
return maxSubStringLength;
}