题目
描述
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
解答
思路
利用队列使用头尾双指针。
代码
class Solution {
public int lengthOfLongestSubstring(String s) {
// 将String转换为sb
StringBuilder sb = new StringBuilder(s);
// 队列,方便双指针移动
LinkedList<Character> ss = new LinkedList<>();
// 当前最长字串的长度
int max = 0;
// 循环每个字符
for (int i = 0; i < sb.length(); i++) {
char a = sb.charAt(i);
if (!ss.contains(a)) {
// 如果队列中不存在,直接插入
ss.add(a);
} else {
// 如果队列中存在,从队列首依次推出到该字符
while (ss.pop() != a) {
}
// 再把字符添加到队列尾
ss.add(a);
}
// 判断子字符最长长度
if (max < ss.size()) {
max = ss.size();
}
}
// 返回结果
return max;
}
}
网友评论