Given a string, find the length of the longest substringwithout repeating characters.
Example 1:
Input: "abcabcbb" Output: 3 Explanation: The answer is "abc", with the length of 3.
Example 2:
Input: "bbbbb" Output: 1 Explanation: The answer is "b", with the length of 1.
Example 3:
Input: "pwwkew" Output: 3 Explanation: The answer is "wke", with the length of 3. Note that the answer must be a substring, "pwke" is a subsequence and not a substring.
题目链接:https://leetcode.com/problems/longest-substring-without-repeating-characters/
题目分析:按照题意模拟即可,用一个双端队列维护,若出现重复的则不断从队首删除,直到满足条件,由于每个元素只会进队列或出队列一次,故时间复杂度为O(n)
14ms,时间击败99.98%
class Solution {
public int lengthOfLongestSubstring(String s) {
boolean[] mp = new boolean[150];
int len = s.length();
int[] dq = new int[len];
int ans = 0, st = 0, ed = 0;
for (char key : s.toCharArray()) {
if (!mp[key]) {
mp[key] = true;
dq[ed++] = key;
ans = Math.max(ans, ed - st);
} else {
while (st < ed && dq[st] != key) {
mp[dq[st]] = false;
st++;
}
st++;
dq[ed++] = key;
}
}
return ans;
}
}